вторник, 21 октября 2008 г.

Минимальное уродство

Я всегда знал, что С-шный синтаксис (и все производные java/c# тоже) - большая гадость. Минимальный пример (который я знаю на сегодняшний день) - "i+++j".
Хотя в том же чистом С разрешены непонятные команды, типа "i; 42;". К счастью, в более поздних производных языках (java/etc.) это запрещено.
Видимо, Фортран (со своим избитым примером со спутником и ";") ничему не научил. Добавление/изменение одного символа не должно приводить к изменению смысла программы(кроме уж совсем крайних случаев, вроде "+" заменить на "-"). Эталоном для меня здесь является Ada (хотя, если в вас другое мнение - скажите мне). Там видно, что люди старались. 
А тут добавление пробела(!) изменяет смысл. Если кто знает, приведите пример на естественном языке. Даже в "казнить нельзя помиловать" и то запятую надо вставлять. :)

воскресенье, 19 октября 2008 г.

Существование и единственность

Я мыслю, следовательно существую... Как доказать единственность?

пятница, 17 октября 2008 г.

Опять про американских математиков

Американские математики опять жгут:
http://orenburg.kp.ru/online/news/153757/
Хотя от некоторых личностей я слышал, что есть расчеты, что во Второй мировой войне СССР при любом исходе победил бы. Если с выборами кажется все довольно просто, то с войной вряд ли минимакс с альфа-бетой или матричные игры...

воскресенье, 12 октября 2008 г.

$n$ самых красивых вещей

1) http://mathworld.wolfram.com/TuppersSelf-ReferentialFormula.html
интроспективный график, неподвижная точка.
формула, связывающая $e$ и $\pi$ (в англ. вики почему-то ее нет).
Пока две самые красивые вещи, которые я видел. 
Какой чай пил(курил, колол, нюхал) Рамануджан? Это еще можно понять... Он с детства сны всякие видел (типа, знаменитая поправка 1/24). 
Но вот что употреблял Туппер?

понедельник, 6 октября 2008 г.

Огородное

Корни у облепихи проходят очень близко к поверхности и по длине обычно составляют 3--5 метров. Это я узнал после того, как с северной стороны длина корней стала не превышать 1.5 метров.

среда, 1 октября 2008 г.

postgresql && Boyer-Moore

Где-то год назад от нечего делать решил покапаться в исходниках mysql||postgresql. Сразу же увидел, что такая базовая вещь, как поиск подстроки в обеих реализациях написаны бруте-форсем(причем, в mysql умудрились написать с помощью goto :) ). 
На моей старенькой машинке (pIII-500) mysql компилилась порядка 1 часа, на ноуте почему-то отказалась, postgres же на старой - 20 мин, на ноуте - 7. Поэтому я решил исправить этот недочет в postgres-е. Где-то дня за два (с учетом понимания того, как это надо компилировать и немного тестировать) реализовал стандартный КМП и отправил им на коммит. Там сразу же сказали, "нафига нам это нужно, это лишь усложнение кода и текущий квадрат нас устраивает". Потом, через несколько постов (по  времени, где-то месяц) все-таки добавили в TODO лист, что неплохо бы реализовать БМ. 
Сейчас, выйдя в отпуск, я решил "добить" задачку. Начал качать актуальные исходники и обнаружил, что проблему уже решили месяц назад ("[D] - marks changes that are done, and will appear in the next release."). Испытываю смешанные чувства: с одной стороны я чем-то помог, создал проблему, с другой стороны не я ее решил. Хотел в отпуске попрограммировать для души... Ладно, что нибудь другое попишу.
Все таки алгоритмы идут в массы. Где-то видел, что в oracle реализован КМП; где-то в ядре linux-а есть настройки, какой алгоритм (среди списка есть БМ) использовать для "сопоставления сетевых пакетов" (что-то подобное). Вот и в postgres-е появилось(-ится). А казалось бы, такая очевидная вещь... не использовать бруте-форсе. Интересно, а до суффиксных массивов еще далеко?
PS. После того как увидел Reflector для .net, обнаружил что системных библиотеках qsort реализован с использованием стандартной выборки "среднего" элемента (а именно, средний элемент). Сразу же "повесил" до квадрата. Кстати, если использовать random при выборе "среднего" элемента и суметь перехватить randSeed, то все-равно можно сгенерить анти-кусорт чуть ли не за (n * log n).