Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Предположительно есть два текстовых массива данных, необходимо прверить для каждого элемента из второго массива, имеется ли он в первом? Есть две идеи: 1. Простой перебор на соответствие для каждого элемента(т.е. для массивов 1000 и 1000 элементов получим миллион сравнений) 2. Слить первый массив в одну строку, потом просто делать поиск строки второго массива в этой строке(записи достаточно структурированы, так что совпадений на стыке записей быть не должно). В этом случае получим 1000 поисков в одной длинной строке(вроде должны быть алгоритмы быстрого поиска, позволяющие получить выигрыш в производительности?) Может кто подскажет что лучше? Или третий вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 17:38 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
А где вариант "Использовать СУБД и не морочить голову"?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 17:50 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Следует ничего не выдумывать, и пользоваться стандартными функциями поиска для данного языка. Это самое оптимальное. Еще есть "Регулярные выражения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 18:18 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Первый файл - в сортированный массив, строку из второго - искать в массиве дихотомией. Применительно к дельфину - TStringList.Sorted=true, TStringList.IndexOf. -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 18:55 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Если оба массива отсортированы, то самы быстрый поиск будет типа такого: Код: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2006, 19:03 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
DocAlА где вариант "Использовать СУБД и не морочить голову"?) Тут СУБД и использовалась-мне нужно сделать импорт/экспорт. У меня есть подозрение что поиск на полное совпадение по ~120 полям и переоткрытие запроса на каждую новую запись будет недетски тормозить. Спасибо locky за вариант для Дельфи-его я наверное и буду использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 11:27 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
zloy den Правильный алгоритм уже был назван, но сформулирую его более четко. 1. Отсортировать оба массива. 2. Пройти параллельно по обоим массивам, сравнивая текущие элементы и продвигая тот из маркеров, который "меньше". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 11:47 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
zloy denПредположительно есть два текстовых массива данных, необходимо прверить для каждого элемента из второго массива, имеется ли он в первом?имхо, обычный count + inner join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 12:51 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
zloy den DocAlА где вариант "Использовать СУБД и не морочить голову"?) Тут СУБД и использовалась-мне нужно сделать импорт/экспорт. У меня есть подозрение что поиск на полное совпадение по ~120 полям и переоткрытие запроса на каждую новую запись будет недетски тормозить. Спасибо locky за вариант для Дельфи-его я наверное и буду использовать Просто к сведению: у него сложность в худшем случае n 2 , а в лучшем n (если я правильно понял), у меня в любом случае n. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2006, 13:32 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
профф wrote: > Тут СУБД и использовалась-мне нужно сделать импорт/экспорт. У меня есть > подозрение что поиск на полное совпадение по ~120 полям и переоткрытие > запроса на каждую новую запись будет недетски тормозить. > > Спасибо locky за вариант для Дельфи-его я наверное и буду использовать > > > Просто к сведению: у него сложность в худшем случае n^2 , а в лучшем n > (если я правильно понял), у меня в любом случае n. Это да, поиск слиянием будет быстрее, за исключением одного но: если размерность массивов - достаточно велика, то может быть невыгодно держать оба массива в памяти и сортировать их. Однако, если массивы действительно размерностью 1000 - то поиск слиянием решается за один проход. -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 11:02 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
set<string> и set_intersection. Это - быстро. Ну и 1000 элементов - не до фига. Возможно эффективнее первое множество засунуть в vector<string> , отсортировать Log n и потом искать эл-ты из второго множества upper_bound - n* log2 n ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 19:59 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Вы, чего, народ!!! Читайте классику, Сэджвика, например. .............................................................. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 21:21 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
И что вы там вычитали? Неужто он порекомендовал заново изобретать двоичный поиск и писать классы? Ну и запретил использовать stl? Если да, то забудьте то, что вы прочли, а если нет, то присоветуйте - что умное по теме вы вычитали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2006, 22:06 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
ЛордМэд Вам замечание. большая просьба отказаться от комментирования действий других участников форума. А приводить свою версию решения проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 00:29 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
locky Это да, поиск слиянием будет быстрее, за исключением одного но: если размерность массивов - достаточно велика, то может быть невыгодно держать оба массива в памяти и сортировать их. ИМХО даже если размерность высока на столько что не помещается в памяти, то тогда все равно сортировка слиянием, потом поиск слиянием. Сначала отсортировать любым удобным способом куски, которые помещаются в памяти, и записать в файлы, потом применить поиск слиянием (до конца сортировать даже и не надо). Полюбому должно быть быстрее поиска в неотсортированных данных такого же объема :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 13:07 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
tchingizЛордМэд Вам замечание. большая просьба отказаться от комментирования действий других участников форума. А приводить свою версию решения проблемы. Замечание, возможно, справедливое. Только прошу не каверкать мой ник. Итак: 1. Использовать хэши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 15:31 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
LordMAD[quot tchingiz]ЛордМэд 1. Использовать хэши. Хэши есть в stl, т.е. не требуется реализовывать алгоритм руками => Сэджвик не проханже, в данном случае. КРоме того выбор хорошей хэш-функции - задача не тривиальная. Выигрыш не очевиден, а объём накладных расходов по сравнению с сортированным массивом строк выше. Собственно то, что я предложил уже предложено было выше, я просмотрел. И мне кажется, что это - оптимальный с точки зрения: а) Времени реализации (при условии, что язык поддерживает коллекции) б) требований к оперативной памяти - только необходимое в) быстродействия - n* log2(n) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 17:47 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
zloy den DocAlА где вариант "Использовать СУБД и не морочить голову"?) Тут СУБД и использовалась-мне нужно сделать импорт/экспорт. У меня есть подозрение что поиск на полное совпадение по ~120 полям и переоткрытие запроса на каждую новую запись будет недетски тормозить. Спасибо locky за вариант для Дельфи-его я наверное и буду использовать А я бы сделал LEFT JOIN... Для СУБД объём данных просто смешной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 17:57 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
Примерно так: SELECT второй_массив.значение FROM второй_массив LEFT JOIN первый_массив ON второй_массив.значение = первый_массив.значение WHERE первый_массив.значение IS NULL Это выдаст значения из второго массива, которые отсутствуют в первом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 18:02 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
DocAl wrote: > Примерно так: > SELECT второй_массив.значение FROM второй_массив LEFT JOIN первый_массив > ON второй_массив.значение = первый_массив.значение WHERE > первый_массив.значение IS NULL > Это выдаст значения из второго массива, которые отсутствуют в первом. .... предварительно заставив человека установить какой-нито сервер, залить в него данные.... угу... -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 19:13 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
locky DocAl wrote: > Примерно так: > SELECT второй_массив.значение FROM второй_массив LEFT JOIN первый_массив > ON второй_массив.значение = первый_массив.значение WHERE > первый_массив.значение IS NULL > Это выдаст значения из второго массива, которые отсутствуют в первом. .... предварительно заставив человека установить какой-нито сервер, залить в него данные.... угу... -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 zloy den Тут СУБД и использовалась-мне нужно сделать импорт/экспорт. У меня есть подозрение что поиск на полное совпадение по ~120 полям и переоткрытие запроса на каждую новую запись будет недетски тормозить. Ась? Какой такой сервер установить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2006, 20:33 |
|
||
|
Быстрый поиск?
|
|||
|---|---|---|---|
|
#18+
niknameХэши есть в stl, т.е. не требуется реализовывать алгоритм руками => Сэджвик не проханже, в данном случае. А кто говорил о ручной реализации хэшей? niknameКРоме того выбор хорошей хэш-функции - задача не тривиальная. Это по-твоему повод не использовать хэши? niknameВыигрыш не очевиден, а объём накладных расходов по сравнению с сортированным массивом строк выше. Вот чтобы таких глупостей не писать, почитай хотя бы книжки! niknameСобственно то, что я предложил уже предложено было выше, я просмотрел. И мне кажется, что это - оптимальный с точки зрения: а) Времени реализации (при условии, что язык поддерживает коллекции) б) требований к оперативной памяти - только необходимое в) быстродействия - n* log2(n) "Когда кажется - креститься надо" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2006, 08:15 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33810865&tid=1346762]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
132ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 474ms |

| 0 / 0 |
