Задачка из жизни

Jul 08, 2012 22:54

Реально из жизни, но теперь буду спрашивать на интервью ( Read more... )

рабочее, Задачки

Leave a comment

Comments 19

french_man July 9 2012, 03:25:43 UTC
Я не совсем понял заздачу. Можно понимать так: дается (извне) новый интервал, который, вообще говоря, может пересекаться с некоторыми ир имеющихся. Нужно переделать список в новый (возможно, состоящий из меньшего числа интервалов), чтоб он удовлетворял условию непересечения

А можно так: найти самому новый интервал, не пересекающийся с имеющимися, и добавить его в список.

Вы имеете в виду первый вариант или второй?

Reply

kot_begemot July 9 2012, 03:29:24 UTC
Первый вариант естественно. Второй вариант тоже интересен, но, как мне кажется, тривиален - достаточно отсортировать интервалы в списке и найти два, расстояние между которыми больше 2, а если такого не найдётся, то добавить в конец.

Reply

french_man July 9 2012, 03:33:30 UTC
Ну, если позволено сортировать по порядку, то и первый вариант тривиален.

Reply

kot_begemot July 9 2012, 03:39:45 UTC
Ну разумеется, говорю же - задачка как раз для интервью.
Дополнительный вопрос - сколько времени займёт её запрограммировать и отладить.

Reply


popye July 9 2012, 03:41:05 UTC
Шо, еще кто-то пишет алгоритмы? :)

Reply

kot_begemot July 9 2012, 03:42:29 UTC
А куда деваться? Вполне себе жизненная задачка, из области оптимизации обработки параллельных потоков данных.

Reply

popye July 9 2012, 04:22:12 UTC
Почти наверняка уже кто-то когда-то что-то такое уже написал... Осталось найти и скопировать :)

Reply

kot_begemot July 9 2012, 04:27:54 UTC
Я боюсь, время поиска превысит время написания и отладки.
Но меня бы и такой ответ устроил (с указанием как именно и где искать).

Reply


gingema July 9 2012, 05:21:21 UTC
А много этих интервалов вообще? Самое осмысленное - хранить их все в одном бинарном массиве. Если пустых клеток там сильно больше, чем заполненных, сделать его многомерным по принципу [блин, забыла, как эта структура данных называется, с индексами и списками по каждому индексу...] - так, чтобы, если, допустим, между 200 и 300 нет ни одной "заполненной" клетки, не держать пустые 100 клеток, а только индекс, что тут ничего нет, и место для пойнтера, на когда появится.

Reply

kot_begemot July 9 2012, 12:58:13 UTC
Не очень тебя понял, но если ты предлагаешь тупо хранить битмап, то увы. Интервалов может быть относительно немного (скажем, десяток-другой), но они могут быть очень длинными (натурально от 0 до 10 триллионов). Столько памяти под данные отводить невозможно. А вот идея хранения дырок вместо интервалов мне нравится.

Reply


ctapnep July 9 2012, 13:42:11 UTC
в первую очередь, перевести список интервалов (и тот, который надо вставить тоже) в вид (start, end) и отсортировать его. Дальше смотрим куда попадает вставляемый интервал и с чем он пересекается. В зависимости от - или вставляем или поглощаем.
Единственный скользкий момент на котором можно сподткнуться, как я вижу - это если вставляемый интервал поглощает несколько существующих.

Reply

kot_begemot July 10 2012, 01:04:43 UTC
Ага, всё так. Тут основной момент в том, что задачка - простая. Но находятся умельцы, пилящие её уже месяц...

Reply


(The comment has been removed)

kot_begemot July 10 2012, 01:06:13 UTC
Она не то чтобы сильно известна. И стыдиться нечего - наоборот. Вообще, очень радует, что есть ещё люди, с удовольствием берущиеся за такие вот задачки.
А то в нашем корпоративном болтое любое задание сложнее тривиального перебора массива вызывает у народа ступор.

Reply


Leave a comment

Up