Сортировка (программистское)

и задачки для интервью.
User avatar
olg2002
Уже с Приветом
Posts: 990
Joined: 27 Mar 2002 10:01
Location: Palo Alto, CA

Re: Сортировка (программистское)

Post by olg2002 »

vaduz wrote:
venco wrote:В результате, если я не ошибся, потребуется не больше чем 15100000 бит или 1887500 байт.


15500000 бит или 1937500 байт в случае 500 тыс дельт=0 и 500 тыс дельт=8589


У меня получается только 14500000 бит. 8589 кодируется 1110+13 бит, несмотря на то, что само число требует 14 бит в двоичном представлении. Можно сказать, что в схеме venco числа до 2^11 кодируются as is, а свыше - без лидирующей единицы.
User avatar
olg2002
Уже с Приветом
Posts: 990
Joined: 27 Mar 2002 10:01
Location: Palo Alto, CA

Re: Сортировка (программистское)

Post by olg2002 »

Flash-04 wrote:
если кто знает, откуда она растет, - было бы любопытно

вы про это?
http://moderator.appspot.com/#16/e=c9
Ask a Google engineer
This is your chance to interview us! Feel free to ask anything from "How many cafeterias are there?" to "How would you sort 1 million 32-bit integers in 2MB of RAM?"


на самом деле подобную задачу мне давали ещё в 1993 году, но правда внешнюю память использовать можно было :D


В этом контексте вопрос уже позиционируется как "часто задаваемый". При этом сам Гугл как раз и дает очень невнятный ответ:

http://moderator.appspot.com/#9/e=c9&t= ... n+integers
http://neopythonic.blogspot.com/2008/10 ... n-2mb.html

Guido van Rossum wrote:Someone jokingly asked me how I would sort a million 32-bit integers in 2 megabytes of RAM, using Python. Taking up the challenge, I leared something about buffered I/O.

Obviously this is a joke question -- the data alone would take up 4 megabytes, assuming binary encoding! But there's a possible interpretation: given a file containing a million 32-bit integers, ...


... blah-blah-blah. Веников не вяжут, и горшков тоже не обжигают.

Есть ссылки позабавнее:

NYTimes wrote:Mr. Schmidt asked Senator McCain, “How do you determine good ways of sorting one million 32-bit integers in two megabytes of RAM?” Immediately signaling that the question was asked in jest, Mr. Schmidt moved on. Six months later, Senator Obama faced the same question, but his staff had prepared him. When he replied in fluent tech-speak (“A bubble sort is the wrong way to go”), the quip brought down the house.
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Re: Сортировка (программистское)

Post by vaduz »

olg2002 wrote: 8589 кодируется 1110+13 бит


Че-то я не понял как вы будете 12685 от 4493 отличать.
11000110001101 -> 1110+1000110001101
01000110001101 -> 1110+1000110001101
User avatar
olg2002
Уже с Приветом
Posts: 990
Joined: 27 Mar 2002 10:01
Location: Palo Alto, CA

Re: Сортировка (программистское)

Post by olg2002 »

vaduz wrote:
olg2002 wrote: 8589 кодируется 1110+13 бит


Че-то я не понял как вы будете 12685 от 4493 отличать.
11000110001101 -> 1110+1000110001101
01000110001101 -> 1110+1000110001101


Правильное кодирование:

11000110001101 -> 1110+1000110001101
01000110001101 -> 110+000110001101
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Re: Сортировка (программистское)

Post by vaduz »

А, точно.
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Re: А точно

Post by vaduz »

sketteEleta wrote:СТС Финанс изпълнява отложените ордери моментално и точно на заявената от клиента цена дори и при гап, дори и петък срещу понеделник.


Сдаюсь. А какой правильный ответ? :crazy:
User avatar
olg2002
Уже с Приветом
Posts: 990
Joined: 27 Mar 2002 10:01
Location: Palo Alto, CA

Re: Сортировка (программистское)

Post by olg2002 »

Всех с Новым годом!

Быстрое решение также возможно. Если мы можем паковать сортированные числа так, чтобы они занимали меньше памяти, то этим мы и воспользуемся: прочитаем столько чисел, сколько поместится в текущую свободную память, быстро их отсортируем, сожмем, используя подходящий prefix-free код, сольем с предыдущей отсортированной последовательностью и получим новую текущую отсортированную последовательность. Повторить до получения результата (4-5 итераций для миллиона чисел).

Вместо 45 минут сортировки вставкой получаем всего ~0.5 секунд (qsort() без ограничений памяти работает ~0.33 секунд). Отмечу, что опять миллион оказывается хорошо подобранным параметром задачи - он достаточно далеко отстоит от теоретического предела представимости в 2 МБ сортированной последовательности, чтобы позволить быструю сортировку (т.е. малое количество итераций).

Мое решение полностью (идеи, код, доказательство, программы) в olg2002.livejournal.com.
User avatar
Dm.uk
Уже с Приветом
Posts: 5812
Joined: 12 Apr 2001 09:01
Location: нэподалеку от Ireland

Re: Сортировка (программистское)

Post by Dm.uk »

> Память - дешёвая, диски - дешёвые, процессорных циклов неиспользованных - как грязи!
Если не хватает того, что есть, для конкретной сегодняшней задачи - дык купим больше!
Нафик всякие алгоритмы-фигоритмы-шмагоритмы!


Вы забываете сколько все это кушает Ватт...

Ну джавистам и проч. разумеется и даром не нужны :-)

Return to “Головоломки”