Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / задачка / 25 сообщений из 35, страница 1 из 2
26.11.2010, 17:44
    #36979939
truel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Добрый день, всем!

Есть задачка:

Есть список номеров угнанных машин по городу и есть список номеров машин за сегодня, которые проехали по городу. Нужно получить список номеров уганных машин, которые проехали по городу за сегодня. Нужно найти алгоритм, при этом он должен быть линейной сложности(не должно быть вложенных циклов).

Есть идеи?

Заранее спасибо.
...
Рейтинг: 0 / 0
26.11.2010, 17:58
    #36979984
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
truel,

а номера какого вида? обычные российские?
...
Рейтинг: 0 / 0
26.11.2010, 18:03
    #36979995
GSerg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный Меча номера какого вида? обычные российские?
Дык не пофигу ли? Сравнение на тупое равенство наверняка.

Афтар, видимо, интересуется только цикловой строной вопроса.
Оба списка сортируются, потом одновременный односторонний проход по обоим.

Merge join , иными словами.
...
Рейтинг: 0 / 0
26.11.2010, 18:04
    #36980003
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
GSergОба списка сортируются , потом одновременный односторонний проход по обоим.Требуется линейная сложность.
...
Рейтинг: 0 / 0
26.11.2010, 18:11
    #36980016
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный МечGSergОба списка сортируются , потом одновременный односторонний проход по обоим.Требуется линейная сложность.
Тогда отсортированность списков вменяем в исходные условия ))) А то об этом же ни слова. Кто сказал, что они не отсортированы изначально? )))
...
Рейтинг: 0 / 0
26.11.2010, 18:12
    #36980021
GSerg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный МечТребуется линейная сложность.
Да, но ввиду уточняющей фразы автора "не должно быть вложенных циклов" мне представляется, что автор, не до конца разбираясь в тонкостях момента, имел в виду "не N^2", а не "обязательно N".

Также представляется маловероятным, чтобы гарантированно O(N)-ный алгоритм соединения существовал вообще. Иначе почему он не используется в современных СУБД?
...
Рейтинг: 0 / 0
26.11.2010, 18:19
    #36980044
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
GSergТакже представляется маловероятным, чтобы гарантированно O(N)-ный алгоритм соединения существовал вообще. Иначе почему он не используется в современных СУБД?В общем виде нет.
Однако номера можно закодировать целыми числами, после чего искать подходы, как, например, здесь
...
Рейтинг: 0 / 0
26.11.2010, 18:26
    #36980066
truel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
GSergЯростный МечТребуется линейная сложность.
Да, но ввиду уточняющей фразы автора "не должно быть вложенных циклов" мне представляется, что автор, не до конца разбираясь в тонкостях момента, имел в виду "не N^2", а не "обязательно N".

Вопрос был с собеседования, насколько помню требовалось найти именно линейную сложность. Списки неотсортированы. Поэтому Merge join, как я понимаю, не годится, т.к. нету алгоритма сортировки с сложностью менее n*log(n).
...
Рейтинг: 0 / 0
26.11.2010, 18:29
    #36980072
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный МечGSergТакже представляется маловероятным, чтобы гарантированно O(N)-ный алгоритм соединения существовал вообще. Иначе почему он не используется в современных СУБД?В общем виде нет.
Однако номера можно закодировать целыми числами, после чего искать подходы, как, например, здесь
Там задачка "немного" другая.

А тут - есть массивы (пусть с целыми числами - это абсолютно ничего не даст):

[5, 6, 1, 10, 3, 4, 19]
[32, 2, 4, 8, 1, 11, 7, 13]

Ну как ты в один проход линейно найдешь пересечение этих двух массивов? Никак.
Только если они изначально упорядочены.
...
Рейтинг: 0 / 0
26.11.2010, 18:31
    #36980076
truel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный МечGSergТакже представляется маловероятным, чтобы гарантированно O(N)-ный алгоритм соединения существовал вообще. Иначе почему он не используется в современных СУБД?В общем виде нет.
Однако номера можно закодировать целыми числами, после чего искать подходы, как, например, здесь

Почитал, но непонятно, как применить тот подход. В той задачке в качестве элементов массива использовались простые числа, здесь же набор из букв и цифр, поэтому простой суммой не обойтись.
...
Рейтинг: 0 / 0
26.11.2010, 18:39
    #36980094
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
truelПочитал, но непонятно, как применить тот подход. В той задачке в качестве элементов массива использовались простые числа, здесь же набор из букв и цифр, поэтому простой суммой не обойтись.
Замени набор букв и цифр на числа. Это поможет? Нет.
...
Рейтинг: 0 / 0
26.11.2010, 18:42
    #36980105
truel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Edd.DragontruelПочитал, но непонятно, как применить тот подход. В той задачке в качестве элементов массива использовались простые числа, здесь же набор из букв и цифр, поэтому простой суммой не обойтись.
Замени набор букв и цифр на числа. Это поможет? Нет.
Не понимаю, как это может помочь. Пусть будет алгоритм кодирования номера в число и обратный алгоритм декодирования, и мы имеем тогда дело только с числами.

В том примере нужно было только один выкинутый номер, а здесь не просто номер, а серию номеров.
...
Рейтинг: 0 / 0
26.11.2010, 18:57
    #36980125
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
truelНе понимаю, как это может помочь. Пусть будет алгоритм кодирования номера в число и обратный алгоритм декодирования, и мы имеем тогда дело только с числами.

В том примере нужно было только один выкинутый номер, а здесь не просто номер, а серию номеров.
Так я так и сказал - НЕ поможет.
Можно забыть о той задаче и не мусолить ее в мозгу.
...
Рейтинг: 0 / 0
26.11.2010, 19:04
    #36980142
truel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Можно ли задачу решить так:

1. хэшируем 1 массив всех номеров города.
2. ищем каждый элемент 2 массива в хэш-таблице 1 массива.

Сложность по теории получается, поправьте, если не прав, то O(n*ln(n)).
...
Рейтинг: 0 / 0
26.11.2010, 19:08
    #36980150
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
truelМожно ли задачу решить так:

1. хэшируем 1 массив всех номеров города.
2. ищем каждый элемент 2 массива в хэш-таблице 1 массива.

Сложность по теории получается, поправьте, если не прав, то O(n*ln(n)).в принципе так можно и за линейное время уложиться, но для этого надо хэш примерно на 35937000 персон. Что там с ограничением по памяти? Да и предварительно обнулить элементы придется...
...
Рейтинг: 0 / 0
26.11.2010, 19:10
    #36980153
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
хотя нет, многовато. 4492125 байт понадобится.
...
Рейтинг: 0 / 0
26.11.2010, 19:13
    #36980159
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
truelМожно ли задачу решить так:

1. хэшируем 1 массив всех номеров города.
2. ищем каждый элемент 2 массива в хэш-таблице 1 массива.

Сложность по теории получается, поправьте, если не прав, то O(n*ln(n)).
Тогда фраза "не должно быть вложенных циклов" отпадает.

Цикл по второму массиву
{
Цикл-поиск в таблице хешей
}
...
Рейтинг: 0 / 0
26.11.2010, 21:53
    #36980332
tempestadept
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный Меч,

В автомобильных номерах используются далеко не все буквы кириллицы, так что возможных номеров меньше. С
другой стороны, есть ещё код региона...
А необходимость обнулять табличку добавляет константное время и не влияет на асимптотику, так что требования формально соблюдены.
...
Рейтинг: 0 / 0
26.11.2010, 21:59
    #36980336
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
select можно использовать?
...
Рейтинг: 0 / 0
26.11.2010, 22:54
    #36980406
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
две таблички, индексы, джойн :)
...
Рейтинг: 0 / 0
27.11.2010, 00:57
    #36980506
apxutektop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Яростный МечGSergОба списка сортируются , потом одновременный односторонний проход по обоим.Требуется линейная сложность.

А в этом случае какова сложность будет? Разве не N?
...
Рейтинг: 0 / 0
27.11.2010, 01:56
    #36980536
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Народ, вы чего?
Поскольку ограничения на ресурсы не указано, задача решается элементарно - составлением матрицы (решета).
Edd.Dragon и ЯрМеч были правы, смысл примерно таков и есть.
Давайте посчитаем ( http://gibdd.net/codes.html) - на данный момент мы имеем всего 10*10*10*12*12*12*122=210816000 федеральных автономеров. Для их запоминания (есть-нет) достаточно массива (матрицы) объемом 26352000 байт (т.е. всего ~25 МБайт). Даже с учетом номеров спецтранспорта и т.п. возрастает он ненамного. Таким образом, алгоритм прост:
- описываем функцию, позволяющие сопоставить конкретный номер с его местом в матрице
- инициализируем матрицу
- проходим 1 раз по массиву "проехавших авто" и отмечаем их в матрице
- проходим 1 раз по массиву "угнанных авто", преобразуем номер в место и сверяем с матрицей, в случае совпадения - запоминаем.
Усё...
...
Рейтинг: 0 / 0
27.11.2010, 10:02
    #36980615
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
AndreTM,
А составление матрицы какую сложность имеет?
...
Рейтинг: 0 / 0
27.11.2010, 10:04
    #36980617
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Edd.DragonAndreTM,
А составление матрицы какую сложность имеет?
Никакую. Поскольку заранее создаём массив нужного размера. Простое выделение памяти...
...
Рейтинг: 0 / 0
27.11.2010, 10:12
    #36980619
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка
Ну, выдайте мне, например, сотню тысяч номеров машин и тысячу номеров "угнанных".
В любом табличном виде.
А я вам отвечу вышеописанным алгоритмом...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / задачка / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]