Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в ОЧЕНЬ большом массиве 
:(
    Опции темы
Rage
Дата 1.2.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 30.10.2006
Где: Спб

Репутация: 1
Всего: 1



Привет, всем!
Подскажите, пожалуйста, как организовать поиск в упорядоченном массиве длиной, допустим, 1000000000000.
В принципе длина не важна. Суть в том, что она больше чем позволяет long int. Как можно поступить в таком случае?
PM MAIL ICQ   Вверх
Alexeis
Дата 1.2.2010, 23:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Бинарный поиск это логорифмическое время.
2^100 = 1 267 650 600 228 229 401 496 703 205 376 
Всего 100 итераций. 

Это больше чем влазит в int64.

Добавлено через 2 минуты
Это пожалуй больше чем емкость всех жестких дисков которые были произведены на свете.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rage
Дата 2.2.2010, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 30.10.2006
Где: Спб

Репутация: 1
Всего: 1



хм... очень странно. потому что меня сегодня на собеседовании попросили провести поиск в таком массиве =) ну можт я на пару нулей ошибся...
PM MAIL ICQ   Вверх
mrbrooks
Дата 2.2.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Rage @  1.2.2010,  23:12 Найти цитируемый пост)
как организовать поиск в упорядоченном массиве длиной, допустим,

если уж массив отсортирован - однозначно двоичный (бинарный) поиск. 
PM MAIL   Вверх
xvr
Дата 2.2.2010, 14:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Проблема не в том, как искать в таком массиве, а где его хранить  smile В память (32х битную) он не влезет, т.е. хранить надо на внешнем носителе, и искать там же.
Т.е. вопрос превращыется в другой - как организовать бинарный поиск в (большом) файле на диске.

PM MAIL   Вверх
Alexeis
Дата 2.2.2010, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 2.2.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Если известен формат хранения файла и есть интерфейс доступа, то в прицнипе какие проблемы? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 2.2.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Alexeis @ 2.2.2010,  14:35)
xvr, тут похоже академическая задача, суть которой оптимизировать поиск. По моему быстрее бинарного поиска, только поиск хеш таблице. 

Хэш таблицу сначала надо построить  smile По моему, эдесь было произнесено 3 ключевые фразы:
  •  упорядоченный массив
  •  длинна массива больше чем позволяет long int
  •  на собеседовании попросили
Так что выводы:
  •  Бинарный поиск
  •  Внешнее хранилище
  •  Законченное работающее решение не требуется - надо только показать алгоритм решения

PM MAIL   Вверх
unicuum
Дата 3.2.2010, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(xvr @  2.2.2010,  15:09 Найти цитируемый пост)
длинна массива больше чем позволяет long int

1000000000000
32 бита
4294967296
64 бита
18446744073709551616
то есть вполне можно работать

тера гига мега кило
1000'000'000'000
опять же не уточняю окончания, впрочем учитывая как врут современные производители винтов, используя 1000 вместо 1024 и меняя там стандартные системы как вздумается (кстати я по старому считаю и плевал на то, что они там протащили за свои деньги), в общем учитывая это, винты вполне тоже способны хранить такой массив.

А дальше двоичный поиск. Делим адресацию на два и проверяем условие сравнения.
найти 3 (деление без округления, с отбрасыванием остатка)
01234 56789
01 234
2 34
3 4
3


--------------------
user posted image
обычный день на винграде
PM   Вверх
Lazin
Дата 3.2.2010, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



B tree
B+ tree
PM MAIL Skype GTalk   Вверх
mes
Дата 3.2.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(unicuum @  3.2.2010,  05:21 Найти цитируемый пост)
в общем учитывая это, винты вполне тоже способны хранить такой массив.

я так понимаю это относилось к фразе 

Цитата(Alexeis @  1.2.2010,  22:53 Найти цитируемый пост)
Это пожалуй больше чем емкость всех жестких дисков которые были произведены на свете. 

но там говорилось не о 
Цитата
1000000000000

а о
Цитата(Alexeis @  1.2.2010,  22:53 Найти цитируемый пост)
 2^100 =1 267 650 600 228 229 401 496 703 205 376 
Всего 100 итераций. 

Это больше чем влазит в int64.

smile





--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 3.2.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



mes, я как бы определил область эффективности алгоритма. Т.е. сто итераций это верхний предел того что может понадобиться. Раз это производиться быстро даже для невообразимо большого объема данных, то тем более быстро в всех остальных случаях.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 3.2.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



проблема только в том, что этот массив должен быть предварительно отсортирован, а сортируется он хуже чем за линейное время
PM MAIL Skype GTalk   Вверх
mes
Дата 3.2.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alexeis @  3.2.2010,  11:11 Найти цитируемый пост)
mes, я как бы определил область эффективности алгоритма.

я то понял smile как раз теми цитатами и показывал откуда взялся невообразимо большой объем данных.  smile

Добавлено через 1 минуту и 38 секунд
Цитата(Lazin @  3.2.2010,  11:50 Найти цитируемый пост)
проблема только в том, что этот массив должен быть предварительно отсортирован, а сортируется он хуже чем за линейное время 

Цитата(Rage @  1.2.2010,  22:12 Найти цитируемый пост)
, как организовать поиск в упорядоченном массиве длиной


Это сообщение отредактировал(а) mes - 3.2.2010, 12:51


--------------------
PM MAIL WWW   Вверх
jonie
Дата 4.2.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



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

Это сообщение отредактировал(а) jonie - 4.2.2010, 02:23


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.