Да, согласен, мне тоже уже пришла в голову эта идея.Boriskin wrote:Методом от обратного лехко придумывается датасет, на котором самый частый запрос на всех данных не попадет в результирующий список. Более того, можно сделать так, что и все 10 не попадут...crypto5 wrote:Лень сейчас думать, но думаю можно такие цифры подобрать что это будет работать.Интеррапт wrote:Обоснование есть по поводу "100% точности"?crypto5 wrote:На самом деле мне кажется если разбить датасет скажем на 1000 частей, и в каждом точно посчитать топ 10к запросов, а потом слить результаты, то 10 запросов посчитаются с 100% точностью.
Яндекс Лабс в Palo Alto набирает С++ developers
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
In vino Veritas!
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Лечится моим подходом с сортировкой: viewtopic.php?p=5757125#p5757125Boriskin wrote:Дык этот наихудший расклад вообще ничем не лечится, разве нет?crypto5 wrote:Ну да, и если вдруг окажется что таких запросов миллиард вся ваша схема накрылась медным тазом.Tarasik wrote:Конечно менее встечаемые поиски не будут кодироваться так эффективно но экономия все равно будет.crypto5 wrote:Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
In vino Veritas!
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Теория фальсификации Поппера рулит... 

Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Обьяснитесь?Boriskin wrote:Теория фальсификации Поппера рулит...
In vino Veritas!
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Это из гносеологии - эффективнее идею попробовать опровергнуть, и только если этого сделать не получается - пробовать доказать. Программа кандидатского минимума по философии. 

Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Надо же, а у нас в физмат детсадике это называлось просто - найти контрпример.Boriskin wrote:Это из гносеологии - эффективнее идею попробовать опровергнуть, и только если этого сделать не получается - пробовать доказать. Программа кандидатского минимума по философии.
In vino Veritas!
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Контр-пример - это когда можно сообразить на пальцах, но бывает намного сложнее/абстрактнее, но смысл тот же.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 707
- Joined: 12 Mar 2003 22:29
- Location: Moscow->Bay Area, CA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Исходя из того что запросы от реальной поисковой системы, то распределение по частоте будет что-то типа:
C/x, where x=> 1,2,...,N and C number queries of the most popular request.
Допустим, что мы можем позволить иметь в памяти массив целых чисел (номера запросов в файле). Один миллион елементов в памяти не должен вызвать технических затруднений (можно уменьшить до 64К если памяти много нету).
1 шаг. Запоминаем первые 1М запросов.
2 шаг. Генерируем случайное число j в диапазоне [0-N], где N - число прочитанных запросов из файла включая первые 1М
3 шаг. Заменяем j-ый елемент в 1М массиве, если j<1М, а если j>=1M, то игнорируем прочитанный запрос.
Повторяем шаги 2-3 пока не прочитаем весь файл.
Имеем 1М случайно отобранных запросов из последовательности любой длины, причем вероятность любого элемента попасть в "финал" одинакова.
Ну а быстрых способов найти 10 наиболее популярных запросов из 1М множество. Поскольку распределение запросов С/х, то при случайной выборке и достаточном числе образцов оно сохранит свой вид. На самом деле точное распределение не важно, важно чтобы оно достаточно быстро уменьшалось в пределах размера "финалистов".
C/x, where x=> 1,2,...,N and C number queries of the most popular request.
Допустим, что мы можем позволить иметь в памяти массив целых чисел (номера запросов в файле). Один миллион елементов в памяти не должен вызвать технических затруднений (можно уменьшить до 64К если памяти много нету).
1 шаг. Запоминаем первые 1М запросов.
2 шаг. Генерируем случайное число j в диапазоне [0-N], где N - число прочитанных запросов из файла включая первые 1М
3 шаг. Заменяем j-ый елемент в 1М массиве, если j<1М, а если j>=1M, то игнорируем прочитанный запрос.
Повторяем шаги 2-3 пока не прочитаем весь файл.
Имеем 1М случайно отобранных запросов из последовательности любой длины, причем вероятность любого элемента попасть в "финал" одинакова.
Ну а быстрых способов найти 10 наиболее популярных запросов из 1М множество. Поскольку распределение запросов С/х, то при случайной выборке и достаточном числе образцов оно сохранит свой вид. На самом деле точное распределение не важно, важно чтобы оно достаточно быстро уменьшалось в пределах размера "финалистов".
The philosophy of one century is the common sense of the next. --Henry Ward Beecher
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
А чем такой подход лучше описаного варианта с кешем, или моего варианта с разбиванием файла на 1000 кусков, кроме очевидно меньшей точности?
In vino Veritas!
-
- Уже с Приветом
- Posts: 707
- Joined: 12 Mar 2003 22:29
- Location: Moscow->Bay Area, CA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Как организовать в памяти хранение не принципиально, можно и hash map, важно, что размер этого хранилища может быть маленьким и даже помещаться к кэш процессора, независимо от числа запросов в файле. А вот манипуляция с файлами процедура медленная и лучше читать файл один раз проследовательно. Это под углом, чтобы работало быстро и на log файлах с заранее неизвестными размерами.
А принципиально разницы нет, на блоках в 1000 запросов статистика уже будет близка к конечному распределению.
Как уже Berlaga намекнул, Yandex хотел увидеть какой-нибудь разумный вариант down sampling-га. И как Дорогой Леонид Ильич заметил, можно обрабатывать log файлы параллельно, поскольку вставка в хранилище в памяти будет значительно быстрее, чем чтение файлов, особенно если файлы где-нибудь на сети (HDFS).
А принципиально разницы нет, на блоках в 1000 запросов статистика уже будет близка к конечному распределению.
Как уже Berlaga намекнул, Yandex хотел увидеть какой-нибудь разумный вариант down sampling-га. И как Дорогой Леонид Ильич заметил, можно обрабатывать log файлы параллельно, поскольку вставка в хранилище в памяти будет значительно быстрее, чем чтение файлов, особенно если файлы где-нибудь на сети (HDFS).
The philosophy of one century is the common sense of the next. --Henry Ward Beecher
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Близка но все же вы будете анализировать < 0.1% информации, в то время как решение с LFU кешем или разбивкой файла на куски будет учитывать всю информацию, при это мпроизводительность будет такая же если все упрется в IO.roadman wrote:
А принципиально разницы нет, на блоках в 1000 запросов статистика уже будет близка к конечному распределению.
In vino Veritas!
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Из чего вы взяли, что Яндекс намекнул, и где условие задачи по оптимизации по скорости? Даунсэмплинг очевидно теряет точность. Миллиарды запросов уже хранятся где-то на большом диске, так что рассчитывать на реал-тайм нам уже изначально не приходится.roadman wrote: Как уже Berlaga намекнул, Yandex хотел увидеть какой-нибудь разумный вариант down sampling-га. И как Дорогой Леонид Ильич
-
- Уже с Приветом
- Posts: 8632
- Joined: 22 Mar 2011 01:40
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Моя идея предпологала разбитие общего лога на массу кусков (тем более, что в реалии он 100% и так и так будет разбит на отдельные файлы). Далее я строил независимые мапы {full url => number}, которые потом предпологалось склеивать. Но наверное можно и дерево строить вместо мапа.roadman wrote:И как Дорогой Леонид Ильич заметил, можно обрабатывать log файлы параллельно, поскольку вставка в хранилище в памяти будет значительно быстрее, чем чтение файлов, особенно если файлы где-нибудь на сети (HDFS).
Так вот у меня вопросы к теоретикам CS
1) насколько insert в мап хуже/лучше чем в дерево. По-моему, для мапа это будет О(n), a для дерева какой-нибудь O(n * log(n))
2) насколько мап на отдельной машине (скажем 1/50 всех логов) будет меньше/больше, дерева построенного из тех же данных?
3) насколько "склеивать" с полсотни мапов сложнее чем с полсотни деревьев?
-
- Уже с Приветом
- Posts: 9035
- Joined: 25 Oct 2011 19:02
- Location: SVO->ORD->SFO
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Вопрос неправильно поставлен, т.к. map может быть реализован с помощью дерева. Если мы говорим про hash table имплементацию vs классическое бинарное дерево, то вставка в hash table будет O(n) в худшем случае, average - это вопрос интересный, потому что мы тут его как-то рассматривали в скроллере из 10 страниц.Леонид Ильич Брежнев wrote: Так вот у меня вопросы к теоретикам CS
1) насколько insert в мап хуже/лучше чем в дерево. По-моему, для мапа это будет О(n), a для дерева какой-нибудь O(n * log(n))
2) насколько мап на отдельной машине (скажем 1/50 всех логов) будет меньше/больше, дерева построенного из тех же данных?
3) насколько "склеивать" с полсотни мапов сложнее чем с полсотни деревьев?

Дробить и то и другое одинаково легко.
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: Яндекс Лабс в Palo Alto набирает С++ developers
Тот худший случай, когда размер таблицы 1 и всё новые элементы вставляются в конец списка коллизий?dotcom wrote:Вопрос неправильно поставлен, т.к. map может быть реализован с помощью дерева. Если мы говорим про hash table имплементацию vs классическое бинарное дерево, то вставка в hash table будет O(n) в худшем случае

Upd. Даже в этом случае собственно вставка не должна быть O(n). Помним хвост списка, и все дела. Только поиск может достичь той абсурдной сложности, при абсурдной таблице.
Last edited by Medium-rare on 26 Jan 2014 03:10, edited 1 time in total.
... and even then it's rare that you'll be going there...