|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 27, 2003 23:47:57 Пусть у нас есть множество. Имеем на нем все операции, не зависящие от его размера. Существует ли алгоритм поиска в этом множестве, более быстрый чем Log(2,n)? Грубо говоря, поиск половинным делением самый быстрый? |
|
|
Дата: Дек 28, 2003 01:17:30 Хм.. ну можно к примеру сделать индексацию по значению хеша. тогда скорость поиска будет вообще константной. т.е. : char * a = "abcdefght"; table [HashFunc(a)]=a; вот и все. Зы. Некоторые варианты поиска описаны у Юрова. Остальные - у Кнута. |
|
|
Дата: Дек 28, 2003 01:40:36 Я бы сказал, что на очень больших выборках выигрывают AVL-деревья. Бинарный поиск очень неплох. Действительно неплох. Но сбалансированное дерево, вероятно, будет лучше. Может и красно-черные использовать стоит... |
|
|
Дата: Дек 28, 2003 07:50:24 Асимптотически самый быстрый - интерполяционный поиск O(log(log(n))). Но вот константа... :) А мне больше всего нравятся trie, btree, patricia. |
|
|
Дата: Мар 21, 2004 01:27:37 Хороший результат даст комбинированный поиск. Например, хеширование+бинарный поиск. Т.е. делим всё множество на кластеры хэш-функцией, а внутри кластера ищем при помощи бинарного поиска. Получаем малые затраты на вставку и очень быстрый поиск с известной верхней границей: даже если подведёт хэш-функция, поиск займёт не более чем O(log2(N)). |
|
|
Дата: Мар 23, 2004 10:56:17 · Поправил: Solo _DEN_ стоит сначала определиться с объемом памяти, который можно использовать дополнительно. Если памяти нет, но есть возможность отсортировать множество, то тогда да, метод деления пополам... Да и, все-таки, оптимальный поиск делать лучше, когда знаешь структуру и объемы данных - носители информации у нас не идеальны и, обычно, чтение из разбросанных по диску участков проходит дольше, чем чтение из соседних, да и сама операция чтения проходит кластерами, а не записями базы или индексного файла. (например, поиск байта в килобайте лучше делать последовательным просмотром, чем за 10 обращений к диску :) если без кэша) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044 |