avva: (moose)
avva ([personal profile] avva) wrote2013-05-13 01:17 am

альтернатива физзбаззу

Цитирую из подзамочной записи с разрешения автора, который работает в американской компании и интервьюирует программистов:
Интесная закономерность выявляется. Мы начинаем интервью с того, что просим кандидата прочитать вот такой код, и сказать, что он делает. Как бы он назвал эту функцию?

private static int ok(int a, int b) {
   while (a >= b) a -= b;
   return a;
}

Пока результаты такие, что после этого вопроса интервью можно заканчивать. Если человек отвечает нормально на этот вопрос, то и дальше отвечает нормально. Если вообще близко не может понять о чем речь, то дальше только хуже.

[identity profile] piter239.livejournal.com 2013-05-13 08:14 am (UTC)(link)
Без гарантии "все числа различные" сортировать таки надо. Гарантия была в задании?

[identity profile] gineer.livejournal.com 2013-05-13 08:27 am (UTC)(link)
"массив чисел от 0 до 255 размером 256"

ну, собственно, я сам тоже не сразу дотумкал, в чом подвох,
хоть и сразу, что он есть.
просто предствьте на более очевидном примере, что ли.
типа массив из 4 чисел, от 0 до 3. ;)

[identity profile] mtyukanov.livejournal.com 2013-05-13 08:49 am (UTC)(link)
Ну и? Типа массив из 4 чисел, от 0 до 3: {2,1,0,1}. Отсортируем, пользуясь знанием о возможных значениях 0..3. Задача на самом деле довольно интересная.

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 09:07 am (UTC)(link)
сортировать все равно не нужно.
Посчитать количество каждого номера и сгенерировать массив.
O(n)

[identity profile] gineer.livejournal.com 2013-05-13 09:14 am (UTC)(link)
да, я тоже так понял, сперва
но, там, всетаки, еще было ЭТО требование -- каждое из чисел встречается один раз. ;)

[identity profile] mtyukanov.livejournal.com 2013-05-13 09:42 am (UTC)(link)
Так "подсчитать количество каждого номера и сгенерировать массив" -- это и есть "сортировать" для данного случая. Если бы под "сортировать" имелось в виду "пользоваться стандартными методами сортировки" -- это было бы просто глупо.

А так -- легкая, минутная с набивкой кода, задачка, заставляющая быстро чуть-чуть подумать -- и при этом вполне практичная, такие случаи сплошь и рядом.

Можно развить ее до более задумчивой, если запретить использовать для подсчета внешний контейнер -- предположим, дело происходит в условиях жестких ограничений по памяти, нужен чистый inplace. Или просто порассуждать, когда для хранения количеств лучше пользоваться массивом, а когда динамической структурой вроде списка. Ну и, да, спросить, а что будет, если добавить условие "неповторяющиеся числа". Все легкое, но все вполне осмысленное.

[identity profile] gineer.livejournal.com 2013-05-13 09:54 am (UTC)(link)
дык... там и была эта оговорка, про "неповторяющиеся числа",
которая обессмысливает вообще сам вопрос
по крайней мере с моей т.з.
с точки зрения интервбюера -- все было ок :)

[identity profile] d-ohrenelli.livejournal.com 2013-05-13 09:57 am (UTC)(link)
Я проверил, это, кстати, стандартный алгритм сортировки, на3ывается сортировка подсчетом или
counting sort.

Так что я был не прав.

[identity profile] unbe.livejournal.com 2013-05-13 07:25 pm (UTC)(link)
http://en.wikipedia.org/wiki/Counting_sort

[identity profile] unbe.livejournal.com 2013-05-13 07:26 pm (UTC)(link)
ой, поздно заметил ваш ответ на собственный комментарий.

[identity profile] piter239.livejournal.com 2013-05-13 09:04 am (UTC)(link)
Берем пример 0 0 0 1

В чем подвох?

[identity profile] gineer.livejournal.com 2013-05-13 09:12 am (UTC)(link)
http://avva.livejournal.com/2625137.html?thread=95997041#t95997041

[identity profile] piter239.livejournal.com 2013-05-13 07:25 pm (UTC)(link)
да это-то сразу понятно.

Непонятно другое: с какой целью (или по какой причине) Вы КЛЮЧЕВОЕ требование -- каждое из чисел встречается один раз

не упомянули ни в первом своем комментарии, ни в ответе на мой прямой вопрос о гарантии "все числа различные"?