Возможно. Я больше по описанию ориентировался. Что там нарисовано - я не совсем понял.crypto5 wrote:Ну мне показалось что это префиксное дерево а не дерево ХоффманаИнтеррапт wrote:Пример очень плохой. Потому что вы нарисовали дерево Хаффмана, но вы не нарисовали сами данные, которые этим деревом кодироваться будут. Дерево только алгоритм кодирования символов содержит, но не содержит сами данные, которые этим деревом будут кодироваться.Tarasik wrote:пример конечно не очень хороший но достаточно для того чтоб показать что количество нодов будет меньше чем символов в наборе поисковых запросов.
Яндекс Лабс в Palo Alto набирает С++ developers
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Я вам больше скажу - надо еще флажок для того, чтоб показать является ли нода концом слова и int или даже long для того чтоб показать сколько раз эта буква встречается. Так же и обычего дерево Хафмана не сжимает если текст короткий потому что надо сохранять дерево вместе с последовательностью битов чтоб правильно восстановить.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
Но для запросов которые встречаются по http://www.google.com/trends/hottrends 200000+ раз экономия получается значительная. Так для Maveriсs нам понадобится ветка длиной 8 нод которой мы зашифруем 200000+ запросов (1600000 юникод символов). Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет. Вобщем памяти хватит.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Каким образом это разумно позволит запроцессить файл с млрд запросов?
Ес-но, если время подсчета некритично (ну типа мы раз в несколько часов обрабатываем эти млрд запросов), то есть намного более простые способы, особенно для таких вещей как поисковые термины, где мы можем позволить себе некоторые "вольности", т.к. в случае небольшой ошибки - ничего страшного не случится. Как вариант - lossy counting алгоритм, который позволяет приблизительно прикинуть частоту встречаемости элементов, причем в один проход по потоку.
Ес-но, если время подсчета некритично (ну типа мы раз в несколько часов обрабатываем эти млрд запросов), то есть намного более простые способы, особенно для таких вещей как поисковые термины, где мы можем позволить себе некоторые "вольности", т.к. в случае небольшой ошибки - ничего страшного не случится. Как вариант - lossy counting алгоритм, который позволяет приблизительно прикинуть частоту встречаемости элементов, причем в один проход по потоку.
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Да, я пытаюсь зашифровать список поисковых запросов "расширенным" префиксным деревом. Расширенным потому что в каждой ноде нужно хранить только один символ и флаг является ли эта нода листом (концом слова). Этого достаточно чтоб 1) восстановить список фраз без потерь 2) найти самую встречающуюся фразу за один проход по дереву.Интеррапт wrote:Возможно. Я больше по описанию ориентировался. Что там нарисовано - я не совсем понял.crypto5 wrote:Ну мне показалось что это префиксное дерево а не дерево ХоффманаИнтеррапт wrote:Пример очень плохой. Потому что вы нарисовали дерево Хаффмана, но вы не нарисовали сами данные, которые этим деревом кодироваться будут. Дерево только алгоритм кодирования символов содержит, но не содержит сами данные, которые этим деревом будут кодироваться.Tarasik wrote:пример конечно не очень хороший но достаточно для того чтоб показать что количество нодов будет меньше чем символов в наборе поисковых запросов.
Ах, да. Если дерево кодировать live по мере того как поступают запросы то будет совсем быстро - быстро обновили дерево и так же быстро можно из него прочитать. То есть буквально достаточно быстро чтоб полностью и абсолютно точно гуглмугл вам возвращал список по мере как вы печатаете.
Но даже если препарировать сырые логи - будет быстрей чем эти сортировки или МР с той же точностью. Но медленнее чем семплирование, зато точно как аптеке.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
In vino Veritas!
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Миллиард уникальных запросов ? Хахаха. Человечество не такое умное. Мы все мыслим (научены мыслить) достаточно шаблонно, иначе сингулярности не стоило бы ожидать.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Оказывается умное: "15% of the searches we see everyday we’ve never seen before" http://www.google.com/competition/howgo ... works.htmlTarasik wrote:Миллиард уникальных запросов ? Хахаха. Человечество не такое умное. Мы все мыслим (научены мыслить) достаточно шаблонно, иначе сингулярности не стоило бы ожидать.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
При этом они кажется 2 миллиарда запросов каждый день обрабатывают, т.е. за неделю легко набирается миллиард новых уникальных запросов
In vino Veritas!
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
ХОтя даже если миллиард уникальных запросов то нам понадобится дерево из нод количеством равным количеству сумме количества символов в миллиарде запросов. Ну грубо 10 миллиардов. По 5 байтов на нод. 50 гигабайт. У меня на работе поместится - как раз 64 гб памяти.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
У вас только указатель на нод на 64битной архитектуре 8 байт будет занимать, какие 5 байтов?Tarasik wrote:ХОтя даже если миллиард уникальных запросов то нам понадобится дерево из нод количеством равным количеству сумме количества символов в миллиарде запросов. Ну грубо 10 миллиардов. По 5 байтов на нод. 50 гигабайт. У меня на работе поместится - как раз 64 гб памяти.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
In vino Veritas!
-
- Уже с Приветом
- Posts: 8628
- Joined: 22 Mar 2011 01:40
Re: Яндекс Лабс в Palo Alto набирает С++ developers
О, спасибо огромное. Это то что надо для эксперимента.crypto5 wrote:Вы сама беспомощность ))
Вот тут 20 миллионов запросов, можете к каждому запросу пределать стоо раз случайный префикс и суфикс и получится 2 млрд запросов, и с ними играйтесь http://www.gregsadetsky.com/aol-data/
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Задача изначально была про миллиард записей вообще. Из них 15% уникальных - ну чтож, зато остальные хорошо сжимаются в дереве. При чем я сомневаюсь что эти 15% будут хоть немного близко к самым часто встречающимся, Джастин Бибер (не к ночи вспомнил) как был так и будет вверху, так что их может быть надо заносить в отдельное дерево.crypto5 wrote: При этом они кажется 2 миллиарда запросов каждый день обрабатывают, т.е. за неделю легко набирается миллиард новых уникальных запросов
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Оттудова не качает, если скачает то скажите как у вас это получилось и\или залейте на торрент дорогой Леонид Ильич.Леонид Ильич Брежнев wrote:О, спасибо огромное. Это то что надо для эксперимента.crypto5 wrote:Вы сама беспомощность ))
Вот тут 20 миллионов запросов, можете к каждому запросу пределать стоо раз случайный префикс и суфикс и получится 2 млрд запросов, и с ними играйтесь http://www.gregsadetsky.com/aol-data/
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Задача кажется была про "миллиарды".Tarasik wrote:Задача изначально была про миллиард записей вообще. Из них 15% уникальных - ну чтож, зато остальные хорошо сжимаются в дереве. При чем я сомневаюсь что эти 15% будут хоть немного близко к самым часто встречающимся, Джастин Бибер (не к ночи вспомнил) как был так и будет вверху, так что их может быть надо заносить в отдельное дерево.crypto5 wrote: При этом они кажется 2 миллиарда запросов каждый день обрабатывают, т.е. за неделю легко набирается миллиард новых уникальных запросов
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Я отсюда кажется скачал: http://www.infochimps.com/datasets/aol-search-dataTarasik wrote:Оттудова не качает, если скачает то скажите как у вас это получилось и\или залейте на торрент дорогой Леонид Ильич.Леонид Ильич Брежнев wrote:О, спасибо огромное. Это то что надо для эксперимента.crypto5 wrote:Вы сама беспомощность ))
Вот тут 20 миллионов запросов, можете к каждому запросу пределать стоо раз случайный префикс и суфикс и получится 2 млрд запросов, и с ними играйтесь http://www.gregsadetsky.com/aol-data/
In vino Veritas!
-
- Уже с Приветом
- Posts: 762
- Joined: 20 Jan 2005 00:27
- Location: La Jolla, California
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Хорошо, 256 Гб. Тоже не так страшно. А как вы собрались это сортировать, считать count и брать топ от них на одном компьютере ? МР тоже займет неплохо времени для этого.crypto5 wrote:У вас только указатель на нод на 64битной архитектуре 8 байт будет занимать, какие 5 байтов?Tarasik wrote:ХОтя даже если миллиард уникальных запросов то нам понадобится дерево из нод количеством равным количеству сумме количества символов в миллиарде запросов. Ну грубо 10 миллиардов. По 5 байтов на нод. 50 гигабайт. У меня на работе поместится - как раз 64 гб памяти.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Можете набросать формат вашего нода в виде C структуры, которая займет 25 байт?Tarasik wrote:Хорошо, 256 Гб.crypto5 wrote:У вас только указатель на нод на 64битной архитектуре 8 байт будет занимать, какие 5 байтов?Tarasik wrote:ХОтя даже если миллиард уникальных запросов то нам понадобится дерево из нод количеством равным количеству сумме количества символов в миллиарде запросов. Ну грубо 10 миллиардов. По 5 байтов на нод. 50 гигабайт. У меня на работе поместится - как раз 64 гб памяти.crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote: Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.
Я как то недавно 100ГБбайтные файлы на своем лаптопе сортировал, часа 2-3 на файл уходит. Это на старом лаптопе с 8ГБ РАМ, он сортирует блоки по 8БГ а потом их сливает. Если компьютер будет с 256ГБ, то наверное даже быстрее будет.Тоже не так страшно. А как вы собрались это сортировать, считать count и брать топ от них на одном компьютере ? МР тоже займет неплохо времени для этого.
При этом у линукса сейчас sort многопоточный, а вам еще нужно будет попотеть что бы хорошо масштабируемое concurrent trie заимплементить.
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Зачем все эти сложности? Чем lossy counting алгоритм плох, чтобы найти эти самые top 10? На миллиардах записях даст отличную точность.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Ну это уже две разные задачи, отличная точность и 100% точный результат.Интеррапт wrote:Зачем все эти сложности? Чем lossy counting алгоритм плох, чтобы найти эти самые top 10? На миллиардах записях даст отличную точность.
In vino Veritas!
-
- Уже с Приветом
- Posts: 8628
- Joined: 22 Mar 2011 01:40
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Я хотел в университете скачать, так что не проверил сразу. Но да, не качается.Tarasik wrote:Оттудова не качает, если скачает то скажите как у вас это получилось и\или залейте на торрент дорогой Леонид Ильич.Леонид Ильич Брежнев wrote:О, спасибо огромное. Это то что надо для эксперимента.crypto5 wrote:Вы сама беспомощность ))
Вот тут 20 миллионов запросов, можете к каждому запросу пределать стоо раз случайный префикс и суфикс и получится 2 млрд запросов, и с ними играйтесь http://www.gregsadetsky.com/aol-data/
По второму линку все много лучше. Hачалось. 27 минут ETA.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
На самом деле мне кажется если разбить датасет скажем на 1000 частей, и в каждом точно посчитать топ 10к запросов, а потом слить результаты, то 10 запросов посчитаются с 100% точностью.
In vino Veritas!
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
А где там было в задаче про "отличную точность"? Может я чего-то пропустил? Berlaga вон сказал, что там вообще про sampling ответ ожидался. А lossy counting по точности sampling порвет как тузик грелку и на большом кол-ве записей (ес-но если не предполагать, что все записи встречаются с приблизительно одинаковой частотой) - выдаст именно те самые искомые top 10 скорее всего с точностью близкой к тем самым 100%. А что еще нужно для поисковых терминов?crypto5 wrote:Ну это уже две разные задачи, отличная точность и 100% точный результат.Интеррапт wrote:Зачем все эти сложности? Чем lossy counting алгоритм плох, чтобы найти эти самые top 10? На миллиардах записях даст отличную точность.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Обоснование есть по поводу "100% точности"?crypto5 wrote:На самом деле мне кажется если разбить датасет скажем на 1000 частей, и в каждом точно посчитать топ 10к запросов, а потом слить результаты, то 10 запросов посчитаются с 100% точностью.
-
- Уже с Приветом
- Posts: 8628
- Joined: 22 Mar 2011 01:40
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Это была моя идея 5 страниц назад.crypto5 wrote:На самом деле мне кажется если разбить датасет скажем на 1000 частей, и в каждом точно посчитать топ 10к запросов, а потом слить результаты, то 10 запросов посчитаются с 100% точностью.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Лень сейчас думать, но думаю можно такие цифры подобрать что это будет работать.Интеррапт wrote:Обоснование есть по поводу "100% точности"?crypto5 wrote:На самом деле мне кажется если разбить датасет скажем на 1000 частей, и в каждом точно посчитать топ 10к запросов, а потом слить результаты, то 10 запросов посчитаются с 100% точностью.
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Берлага нам рассказал о том что у интервьюера было спрятано в кармане. Про точность в изначальном условии задачи я ничего не утверждал.Интеррапт wrote:А где там было в задаче про "отличную точность"? Может я чего-то пропустил? Berlaga вон сказал, что там вообще про sampling ответ ожидался. А lossy counting по точности sampling порвет как тузик грелку и на большом кол-ве записей (ес-но если не предполагать, что все записи встречаются с приблизительно одинаковой частотой) - выдаст именно те самые искомые top 10 скорее всего с точностью близкой к тем самым 100%. А что еще нужно для поисковых терминов?crypto5 wrote:Ну это уже две разные задачи, отличная точность и 100% точный результат.Интеррапт wrote:Зачем все эти сложности? Чем lossy counting алгоритм плох, чтобы найти эти самые top 10? На миллиардах записях даст отличную точность.
Мы с Тарасиком обсуждали точную оценку.
In vino Veritas!