crazy people
Dec. 1st, 2005 11:43 pmну ни фига ж себе так, ни с того ни с сего. чуваку, открывшему для себя деревья объяснил, что такое big-O notation и порекомендовал два более эффективных алгоритма. полчаса писал, наверное; даже в гуголь сходил освежить воспоминания о скиплистах. а в ответ получил:
...я не люблю хамов.
...я не люблю самодовольных людей, которые всерьез считают себя умней всех.
А посему, всего доброго.
ну и коммент мой он стёр, конечно. а производил впечатление совершенно нормального человека. не знаю, что и думать. неужели от кого угодно можно чего угодно ожидать?
...я не люблю хамов.
...я не люблю самодовольных людей, которые всерьез считают себя умней всех.
А посему, всего доброго.
ну и коммент мой он стёр, конечно. а производил впечатление совершенно нормального человека. не знаю, что и думать. неужели от кого угодно можно чего угодно ожидать?
(no subject)
Date: 2005-12-02 07:50 am (UTC)(no subject)
Date: 2005-12-02 09:09 am (UTC)(no subject)
Date: 2005-12-02 09:10 am (UTC)(no subject)
Date: 2005-12-02 01:46 pm (UTC)(no subject)
Date: 2005-12-02 02:59 pm (UTC)а про скиплист я так и не понял, зачем его здесь применить :(
(no subject)
Date: 2005-12-02 03:22 pm (UTC)скиплист тут при том, что с ним получится O(N log N), что, очевидно, лучше, чем O(N^2).
рассуждения про коллизии правильны, но не особенно релевантны, поскольку, во-первых, O(N*const) = O(N), а во-вторых, процент коллизий можно сделать сколь угодно малым, изменяя load factor.
(no subject)
Date: 2005-12-02 04:05 pm (UTC)Но в реальности будет что-то около O(N*F), где F сложная и путаная, но малорастущая функция - сумма произведений вероятности нахождения подстроки из входной строки в trie. По человечески ее долго расписывать. Т.е. если у нас в trie находятся voda, eric, и искомая строка www.vodafone.com, мы в trie на непопадающих символаx дальше первого уровня заглядывать и не будем.
А с хэшами так - для набора паттернов для всех подстрок каждого паттерна длиной L (вероятно, длина самого короткого паттерна) строится хэш-таблица из этих подстрок. Операция разовая и ее сложность не считаем. Далее для строки, в которой ищем эти паттерны для всех подстрок считаем хэш и ищем его попадание в хэш-таблице. Если попали, проверяем остальную часть паттерна, для которого попался хэш. Если длина всех паттернов одинакова, то O(N), если нет, то O(N*z), где z ~= средняя_длина_паттернов/минимальная_длина_паттерна, что по сути константа.
а соскиплистом все-равно не понятно
(no subject)
Date: 2005-12-02 04:22 pm (UTC)нужно, видимо, договориться о терминах. предлагаю называть строку, в которой ищутся подстроки, словом "строка" (string), искомые в ней подстроки - словом "подстроки" (substrings), а слово "паттерн" не использовать.
(no subject)
Date: 2005-12-02 04:38 pm (UTC)в хэш-таблицу идут хэши от voda,eric,sams(указывает на samsun)
ищем в www.vodafone.com
проверяем подстроки www., ww.v, ..., .vod, voda ... т.е. берем от них хэш и смотрим в таблице
а если искали в supersamsung, то дойдя до sams нужно будет сравнить еще и хвост" - un, отсюда появляется z
(no subject)
Date: 2005-12-02 04:44 pm (UTC)(no subject)
Date: 2005-12-02 05:00 pm (UTC)(no subject)
Date: 2005-12-02 05:09 pm (UTC)и я опять не понимаю. есть массив подстрок для сравнения, все они разной длины. как это мы будем заносить в _хэштаблицу_ (а не в хэш, хэш - это результат вычисления хэш-функции) строки фиксированной длины, если длина у всех разная?
(no subject)
Date: 2005-12-02 05:28 pm (UTC)Строим хэш-таблицу по паттернам:
находим наименьшую рабочую длину - длину самого короткого паттерна, L. Для наших P1..P3 получим L=4. Для всех паттернов берем их префикс длины L, получаем хэш, кладем в хэш-таблицу HT для полученного хэша весь паттерн.
Получаем что-то вида HT[Hash(Substring(P1, 0, L))] = P1 и т.п.
теперь получаем строки, в которых ищем паттерны. Получили T1. Берем из нее все подстроки S длиной L - S1 = "www.", S2 = "ww.v", .. S5 = "voda" ...
Берем от Si хэш, смотрим в HT, если есть попадание, то сравниваем Si с попавшим паттерном. Если длина паттерна равна L, значит совпадение считаем полным. Если больше L, то сравниваем оставшуюся часть паттерна (пусть k-символов) с оставшимися k-символами, следующими за Si и если тоже совпало, значит нашли полное совпадение.
появляются паттерны P - например, "voda", "eric", "samsun"
в хэш-таблицу идут хэши от voda,eric,sams(указывает на samsun)
(no subject)
Date: 2005-12-02 05:46 pm (UTC)(no subject)
Date: 2005-12-02 05:52 pm (UTC)но можно добавить хитрожопости, чтобы держал отдельно хэш для длинных кусков, и отдельно trie для вырожденных коротких паттернов (1-2 символа)
(no subject)
Date: 2005-12-02 06:08 pm (UTC)(no subject)
Date: 2005-12-02 09:01 pm (UTC)если чисто на хэшах, то для подавляющего большинства случаев хватит двух таблиц, что будет O(N*2), но не O(N^2).
(no subject)
Date: 2005-12-03 03:21 am (UTC)(no subject)
Date: 2005-12-03 12:56 pm (UTC)вообще, так и не понятно, откуда вы берете O(N^2). Видимо, все то же множество всех подсток T, длиной от 0 до N. Но оно здесь совершенно не нужно. Если даже и выбрать бессмысленный вариант с отдельными хэш-таблицами для каждой длины паттетна, то число таких таблиц равно кол-ву различных длин паттаров (для паттернов 'a', 'ab', 'cdef' - 3 таблицы) и число подстрок из T, которые мы будем искать в хэш-таблицах, начинающихся с позиции i (для всех 0<i<N)) будет не N, а 3. Поэтому квадрата нет, есть только O(N*3). И если длина Т составит 100, то мы проверим не 10000 подстрок, а 300. Если вы настаиваете на квадрате, объясните, пожалуйста, сами, откуда он может взяться.
(no subject)
Date: 2005-12-03 06:16 pm (UTC)для всех i от 0 до N, для проверки в хэш-таблицах требуется только 3 подстроки - длиной 1, 2 и 4. И от N число подстрок и их длины не меняются. Т.е. O(N*(1+2+4))
Если все-таки где-то есть квадрат, укажите, пожалуйста, его в явном виде.
(no subject)
Date: 2005-12-02 10:09 am (UTC)(no subject)
Date: 2005-12-02 01:45 pm (UTC)-----
ахуеть дайте две.
во-первых, ты сначала определись, О(от чего) ты считаешь - от длины строки или от количества подстрок.
во-вторых, О(К*М) = О(1) - этак любой алгоритм будет О(1).
в-третьих, нужно просто пройти по всем буквам этой строки уже даёт О(N^2) от длины строки.
в-четвёртых, поздравляю с открытием B-tree.
в-пятых, B-tree - это balanced tree, а не binary. у тебя оно хоть и не balanced, но таки и не binary, так что сурово звучащее словосочетание "бинарное дерево" употреблено совсем зря.
и наконец, я щас ваще will blow your mind. есть ещё более эффективные структуры, чем B-tree - например, hashtable, в которых поиск на самом деле O(1) (а не зависит от длин подстрок, как у тебя), и в то же время они не занимают много лишней памяти, как решение с массивами.
резюме - решение с хэштаблицами даёт те же O(N^2), что и "молниеносное" решение с массивами, но проще в имплементации и не расходует зря память. только хэш надо инкрементально считать, а не каждый раз заново.
самое же эффективное решение O(N log N), очевидно, даcт скиплист (google://"skip list"), но придётся повозиться при написании.
(no subject)
Date: 2005-12-02 03:32 pm (UTC)Во-вторых, прописные истины и тривиальные факты (О-нотация, B-tree и его отличие от бинарного, hash-таблицы) тоже излагать не надо. Эти факты знакомы любому первокурснику любого ун-та, прослушавшему курс "Введение в Алгоритмы". А catpad все-таки выпускник Техниона.
А в-третьих, все эти Ваши советы не кажутся мне релевантными.
В итоге создается впечатления надувания щек, Вы уж простите.
(no subject)
Date: 2005-12-02 03:47 pm (UTC)к ты-вы у катпада претензий не было. у вас есть претензии? я вроде бы вас и не называл на ты, хотя ваш ник прямо-таки взывает к такому обращению.
(no subject)
Date: 2005-12-02 04:04 pm (UTC)Да нет, я думаю, знакомы. На всякий случай скажу, что catpad'а лично не знаю, но из постингов сложилось такое впечатление. Да и school опять же.
к ты-вы у катпада претензий не было.
Возможно, но неожиданное тыкание в сочетании с прочим (матерные выражения, обещание поразить разум хэшем" и пр.) может восприниматься как хамство.
Впрочем, дело даже и не в хэше. Просто Ваш постинг отдает неспровоцированной агрессией. Ну я даже не знаю как об'яснить ... Вроде мелочи, а чувствуется. Уитывая соотношение полезности постинга и его тона, мне например очень понятно нежелание продолжать разговор.
Я не хочу Вас обидеть, но, по-моему, так просто не принято. Вы почитайте комменты и "катпада" в журнале. Разве не видна разница в тоне ?
у вас есть претензии? я вроде бы вас и не называл на ты, хотя ваш ник прямо-таки взывает к такому обращению.
Надо же ! Ну ладно. Я необидчив.
(no subject)
Date: 2005-12-02 11:07 am (UTC)(no subject)
Date: 2005-12-02 02:30 pm (UTC)В данном конкретном инциденте рекомендую подумать над следующими ключевыми словами: "поздравляю", "blow your mind" и "ахуеть дайте две".
(no subject)
Date: 2005-12-02 03:00 pm (UTC)с зиваном ты просто попал пальцем в небо. там [по крайней мере, было] достаточно много достойных людей, на которых я отнюдь не смотрел сверху вниз. кроме того, именно там как раз люди отлично распознают bullshit, так что можно не беспокоиться о политической корректности (отсутствие которой ты, возможно, принимаешь за заносчивость).
насчёт фидо (не-зиван) поясни.
ахуеть дайте две - устойчивое идиоматическое выражение, выражающее исключительно удивление. никаких негативных коннотаций не несёт. подумал над "blow your mind". i don't think it's offensive. is it? would you be offended?
P.S. по крайней мере я комментирую в чужом дневнике "задрали уже писать о [нужное подставить]" :-P
(no subject)
(no subject)
Date: 2005-12-03 03:22 am (UTC)(no subject)
Date: 2005-12-07 09:00 pm (UTC)- Доктор, меня никто не любит, нет друзей, со мной не хотят общаться. Может, хоть ты мне поможешь, мерзкий, вонючий старикашка?
(no subject)
Date: 2005-12-07 09:08 pm (UTC)(no subject)
Date: 2005-12-07 09:10 pm (UTC)(no subject)
Date: 2005-12-07 09:17 pm (UTC)"На вкус и цвет - товарища нет".
у нас, видимо, слишком мало общего, чтобы "информативно" общаться.
Вполне возможно. Это нормально.
(no subject)
Date: 2005-12-02 03:24 pm (UTC)(no subject)
Date: 2005-12-02 06:25 pm (UTC)Бывает и такое ...
Date: 2005-12-04 12:59 am (UTC)