Яндекс Лабс в Palo Alto набирает С++ developers

User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Boriskin »

Леонид Ильич Брежнев wrote:А что никого не смутило, что размер дерева для скажем среднестатистического запроса длиной в скажем 80 символов,
80 символов на средний запрос - это сильно врядли.

Code: Select all

Organic Search: Average Share by Word Count (Non-Brand)
Image
Тупизна как Энтропия. Неумолимо растет.
Berlaga
Уже с Приветом
Posts: 1008
Joined: 24 Mar 2010 21:14
Location: SFBA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Berlaga »

Леонид Ильич Брежнев wrote:Берлага, А Вам что мое решение совсем не нравится или Вы принципиальный противник Центрального Комитета?
Дорогой Леонид Ильич, мне все решения нравятся. Но суть задачи была именно в том, что массив данных большой и читать его целиком долго и дорого.
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by АццкоМото »

stenking wrote:И ещё у вас есть место для жизни где есть дверь. И там тоже есть замок. И тоже логично предположить что он открывается ключом. А когда ключей больше чем один то они обычно организовываются в связку.
А я всерьез задумываюсь поставить замок, который открывается телефоном :)
И, кстати, ключа от дома у меня нет - один хрен захожу через гараж, а он открывается машиной. Так что не знаю, как там у Крипто, а у меня связки ключей вообще нет, только брелок от машины, который даже из кармана доставать не надо, оно усе беспроводное, а-ля твоя вожделенная Тесла :)
Мат на форуме запрещен, блдж!
User avatar
Леонид Ильич Брежнев
Уже с Приветом
Posts: 8628
Joined: 22 Mar 2011 01:40

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Леонид Ильич Брежнев »

Berlaga wrote:
Леонид Ильич Брежнев wrote:Берлага, А Вам что мое решение совсем не нравится или Вы принципиальный противник Центрального Комитета?
Дорогой Леонид Ильич, мне все решения нравятся. Но суть задачи была именно в том, что массив данных большой и читать его целиком долго и дорого.
Ну так я выше (до труе) предлагал решения с экстернал сортинг
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Berlaga wrote:
Леонид Ильич Брежнев wrote:Берлага, А Вам что мое решение совсем не нравится или Вы принципиальный противник Центрального Комитета?
Дорогой Леонид Ильич, мне все решения нравятся. Но суть задачи была именно в том, что массив данных большой и читать его целиком долго и дорого.
Если это миллиарды запросов, то почему их читать долго? Пол часа наверное с лаптопного ССД диска.
In vino Veritas!
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by АццкоМото »

crypto5 wrote:Если это миллиарды запросов, то почему их читать долго? Пол часа наверное с лаптопного ССД диска.
Может, потому что нужно уложиться в доли секунды? :gen1:

А-ля как Гоголь не читает полчаса с лаптопного диска, когда я начинаю в строке поиска струячить
Мат на форуме запрещен, блдж!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

АццкоМото wrote:
crypto5 wrote:Если это миллиарды запросов, то почему их читать долго? Пол часа наверное с лаптопного ССД диска.
Может, потому что нужно уложиться в доли секунды? :gen1:
Может и потому, давайте спросим, было ли такое условие на интервью? :radio%:
А-ля как Гоголь не читает полчаса с лаптопного диска, когда я начинаю в строке поиска струячить
Возможно и читает, и сегодня лаптоп сломался :umnik1:
In vino Veritas!
Tarasik
Уже с Приветом
Posts: 762
Joined: 20 Jan 2005 00:27
Location: La Jolla, California

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Tarasik »

Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
In vino Veritas!
Tarasik
Уже с Приветом
Posts: 762
Joined: 20 Jan 2005 00:27
Location: La Jolla, California

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Tarasik »

crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Tarasik wrote:
crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
Железная аргументация 8)
In vino Veritas!
Tarasik
Уже с Приветом
Posts: 762
Joined: 20 Jan 2005 00:27
Location: La Jolla, California

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Tarasik »

Tarasik wrote:
crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
Сейчас попытаюсь набросать - где бы взять миллиардный список запросов не подскажете ?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Tarasik wrote:
Tarasik wrote:
crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
Сейчас попытаюсь набросать - где бы взять миллиардный список запросов не подскажете ?
Вы сама беспомощность ))
Скачайте википедию, разбейте текст на 3-4-5-6-7 граммы, и будет вам отличная эмуляция запросов, можете с ней поиграться.
Вот тут 20 миллионов запросов, можете к каждому запросу пределать стоо раз случайный префикс и суфикс и получится 2 млрд запросов, и с ними играйтесь http://www.gregsadetsky.com/aol-data/
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Интеррапт »

Tarasik wrote:
crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
Я вообще не вижу здесь аналогии с кодом Хаффмана. В случае Хаффмана - дерево будет маленькое, т.к. строится на основе частот встречаемости символа.
Обьясните, что тут общего и где вы видите аналогию?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Интеррапт wrote:
Tarasik wrote:
crypto5 wrote:
Tarasik wrote:Все таки строить дерево вхождений по буквам из каждого запроса - получится быстрей пройтись по нему (ну буквально максимум будет максимальная длина поисковой строки) чем делать семплинг\бутстреппинг 1000000 из 1000000000, его сортировку и проч. Кстати мне тоже задавали такой вопрос, я сначала предложил делать кластер или МР но правильным ответом было все же строить дерево, что я им на доске и исполнил.
Было бы неплохо узнать почему. И так ли очевидно что ваше дерево влезет в память вашего компьютера.
Оно не влезет. Оно поместится. По аналогии с деревьями Хоффмана которые используются в сферическом вакууме для компрессии текста.
Я вообще не вижу здесь аналогии с кодом Хаффмана. В случае Хаффмана - дерево будет маленькое, т.к. строится на основе частот встречаемости символа.
Обьясните, что тут общего и где вы видите аналогию?
В случае с кодом Хаффмана дерево на самом деле маленькое, потому что блок архивирования маленький, а так бы оно было большое ))
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Интеррапт »

crypto5 wrote: В случае с кодом Хаффмана дерево на самом деле маленькое, потому что блок архивирования маленький, а так бы оно было большое ))
Что такое "блок архивирования"? Например, если у тебя будет файл в 10 гигабайт с каким-нибудь английским текстом, то дерево будет такого же размера, как и для файла с 1 мегабайтом английского текста. А именно - будет маленьким.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Интеррапт wrote:
crypto5 wrote: В случае с кодом Хаффмана дерево на самом деле маленькое, потому что блок архивирования маленький, а так бы оно было большое ))
Что такое "блок архивирования"? Например, если у тебя будет файл в 10 гигабайт с каким-нибудь английским текстом, то дерево будет такого же размера, как и для файла с 1 мегабайтом английского текста. А именно - будет маленьким.
Да, потому что архиватор разбивает большой файл на маленькие блоки (например 8МБ), и для каждого строит отдельное дерево и потом им отдельно архивирует.
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Интеррапт »

crypto5 wrote:
Интеррапт wrote:
crypto5 wrote: В случае с кодом Хаффмана дерево на самом деле маленькое, потому что блок архивирования маленький, а так бы оно было большое ))
Что такое "блок архивирования"? Например, если у тебя будет файл в 10 гигабайт с каким-нибудь английским текстом, то дерево будет такого же размера, как и для файла с 1 мегабайтом английского текста. А именно - будет маленьким.
Да, потому что архиватор разбивает большой файл на маленькие блоки (например 8МБ), и для каждого строит отдельное дерево и потом им отдельно архивирует.
Ничего не поменяется, если построение дерева будет по гигабайтному англ тексту, а не по 8 мегабайт. На что спорим?
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Интеррапт wrote:
crypto5 wrote:
Интеррапт wrote:
crypto5 wrote: В случае с кодом Хаффмана дерево на самом деле маленькое, потому что блок архивирования маленький, а так бы оно было большое ))
Что такое "блок архивирования"? Например, если у тебя будет файл в 10 гигабайт с каким-нибудь английским текстом, то дерево будет такого же размера, как и для файла с 1 мегабайтом английского текста. А именно - будет маленьким.
Да, потому что архиватор разбивает большой файл на маленькие блоки (например 8МБ), и для каждого строит отдельное дерево и потом им отдельно архивирует.
Ничего не поменяется, если сканирование будет по гигабайту, а не по 8 мегабайт. На что спорим?
Ладно, согласен, я че то себе код Хаффмана по другому совсем представлял.
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Интеррапт »

crypto5 wrote:Ладно, согласен, я че то себе код Хаффмана по другому совсем представлял.
Так вот, возвращаясь к нашим баранам, я поэтому совсем не вижу аналогии с кодом Хаффмана и нашей задачей. Дерево при построении кода Хаффмана - крошечное, поэтому ну хоть убей, но аналогии не вижу. Но может Tarasik обьяснит, что он общего увидел.
Tarasik
Уже с Приветом
Posts: 762
Joined: 20 Jan 2005 00:27
Location: La Jolla, California

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Tarasik »

Интеррапт wrote:
crypto5 wrote:Ладно, согласен, я че то себе код Хаффмана по другому совсем представлял.
Так вот, возвращаясь к нашим баранам, я поэтому совсем не вижу аналогии с кодом Хаффмана и нашей задачей. Дерево при построении кода Хаффмана - крошечное, поэтому ну хоть убей, но аналогии не вижу. Но может Tarasik обьяснит, что он общего увидел.
Они имеют общего то, что в запросах многие строки полностью или частично совпадают а дерево Хафмана сжимает потому что буквы в тексте повторяются (и их соответственно можно записать меньшим количеством битов чем они занимают в натуре, а если алгоритм усложнить и записывать битами словосочетания а не только буквы то будет сжимать еще лучше). Более того, если дерево для кодирования вебзапросов кодировать минимально необходимыми битами а не юникодом (2мя байтами) на символ, то дерево вебзапросов сожмет еще лучше потому что для нас не важна последовательность запросов - мы можем их восстановить в произвольном порядке а одного дерева хафмана для восстановления текста недостаточно - нужна последовательность битов.
Итак я утверждаю что для кодирования веб запросов
мама
ма
мамаша
мамашка

достаточно дерева из 8 нодов хотя текст занимает 19 символов.

м 4
\
а 4 w
\
м 3
\
а 3 w
\
ш2
\ \
а1 w к1
\
а1 w

пример конечно не очень хороший но достаточно для того чтоб показать что количество нодов будет меньше чем символов в наборе поисковых запросов.
Last edited by Tarasik on 25 Jan 2014 09:09, edited 1 time in total.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Отлично, вам нужно 8 нодов, в которых 8 символов, и еще 7 ссылок между ними = 7 * 4 = 28 байт. Сильная компрессия получилась?
In vino Veritas!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Хотя мои расчеты не правильные, думаю больше будет даже, в зависимости от того как вы дерево реализуете.
In vino Veritas!
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by Интеррапт »

Tarasik wrote:пример конечно не очень хороший но достаточно для того чтоб показать что количество нодов будет меньше чем символов в наборе поисковых запросов.
Пример очень плохой. Потому что вы нарисовали дерево Хаффмана, но вы не нарисовали сами данные, которые этим деревом кодироваться будут. Дерево только алгоритм кодирования символов содержит, но не содержит сами данные, которые этим деревом будут кодироваться.
Речь же тут не про компрессию файла с 1 млрд записей идет - это как-раз мало кого интересует и к тому же очень ресурсозатратно сжимать и разжимать.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Яндекс Лабс в Palo Alto набирает С++ developers

Post by crypto5 »

Интеррапт wrote:
Tarasik wrote:пример конечно не очень хороший но достаточно для того чтоб показать что количество нодов будет меньше чем символов в наборе поисковых запросов.
Пример очень плохой. Потому что вы нарисовали дерево Хаффмана, но вы не нарисовали сами данные, которые этим деревом кодироваться будут. Дерево только алгоритм кодирования символов содержит, но не содержит сами данные, которые этим деревом будут кодироваться.
Ну мне показалось что это префиксное дерево а не дерево Хоффмана
In vino Veritas!

Return to “Работа и Карьера в IT”