Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Электронный словарь в Delphi   Найти похожие ветки 

 
Новичок   (2010-01-24 14:47) [0]

Здравствуйте. Получил задание разработать словарь определенных терминов с описанием, с быстрым поиском. На подобие Lingvo. Сейчас словарь в документе Excel, слов около 100 тыс. Теперь у меня стоит вопрос как хранить набор слов и их описания. Для пробы я загнал словарь в документ XML, с 2-мя атрибутами, слово + описание. Затем сделал интерфейс где на форме расположен Листбокс, в который я подгружаю (объекты) слова из XML документа (средствами XMLDoc). Сама загрузка происходит очень долго.
Пожалуйста посоветуйте более быстрое решение для данной задачи, и еще словари будет необходимо шифровать. Спасибо.


 
Юрий Зотов ©   (2010-01-24 15:40) [1]

Таблица БД?

Хэш_слова (Integer, первичный ключ)
Зашифрованное_слово (BLOB)
Зашифрованное_описание_слова (BLOB)


 
@!!ex ©   (2010-01-24 16:01) [2]

> [1] Юрий Зотов ©   (24.01.10 15:40)

хэш зачем?


 
@!!ex ©   (2010-01-24 16:02) [3]

Я бы в бинарном виде хранил. грузится мгновенно.


 
Новичок   (2010-01-24 16:05) [4]

из БД только работал с Ораклом и MySQL, для не большого словаря не хотелось бы поднимать сервера или запускать дополнительные службы.


> Я бы в бинарном виде хранил. грузится мгновенно.


Можно немного по подробнее, или ключевые слова для поиска. Спасибо.


 
Юрий Зотов ©   (2010-01-24 16:19) [5]

> @!!ex ©   (24.01.10 16:01) [2]

Для ускорения поиска (по хэшу слова, а не по нему самому).


 
@!!ex ©   (2010-01-24 17:26) [6]

> [5] Юрий Зотов ©   (24.01.10 16:19)
> Для ускорения поиска (по хэшу слова, а не по нему самому)
> .

Скорость поиска в такой штуке O(N) где N количество слов.
не лучше ли использовать дерево символов?
Памяти конечно побольше кушает, зато скорость поиска никак не зависит от количества слов.
Можно немного пожертвовать скоростью, и при всего лишь двойном потреблении памяти получить скорость опять же независяшую от количество элементов.


 
Кто б сомневался ©   (2010-01-24 20:42) [7]


> Скорость поиска в такой штуке O(N) где N количество слов.


Хэши можно рассортировать по возрастанию.. Тогда найти будет нужный еще быстрее..


 
@!!ex ©   (2010-01-24 20:55) [8]

> [7] Кто б сомневался ©   (24.01.10 20:42)

Все равно зависимость от количества.


 
Кто б сомневался ©   (2010-01-24 21:01) [9]


> Все равно зависимость от количества.


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


 
@!!ex ©   (2010-01-24 21:07) [10]

> [9] Кто б сомневался ©   (24.01.10 21:01)

Медленней будет, но незначительно.
Настолько незначительно, что вполне конкуретное по скорости.
Правда добавление элементов медленное, т.к. придется заново сортировать.
Но скорость загрузки в таких задачах не критична.


 
картман ©   (2010-01-25 00:51) [11]


> @!!ex ©   (24.01.10 17:26) [6]


> > Для ускорения поиска (по хэшу слова, а не по нему самому)
> > .
>
> Скорость поиска в такой штуке O(N) где N количество слов.
>

Скорость поиска в такой штуке О(1), вообще-то.


> @!!ex ©   (24.01.10 20:55) [8]
>
> > [7] Кто б сомневался ©   (24.01.10 20:42)
>
> Все равно зависимость от количества.


При нынешних объемах памяти, можно заполнять таблицу, да хоть на 1/10 - зависимости от N не будет.


 
@!!ex ©   (2010-01-25 01:42) [12]

> [11] картман ©   (25.01.10 00:51)
> Скорость поиска в такой штуке О(1), вообще-то.

С какой радости О(1)???
C O(N) я не прав, потому что такая стоимость полного перебора, а у нас может и в середине быть и в начале. Вот скорость поиска по дереву константа и от количества не зависит.
А список как ни сортируй - чем больше, тем медленней.


 
картман ©   (2010-01-25 01:59) [13]


> @!!ex ©   (25.01.10 01:42) [12]

как с какой? Слово преобразуется в хэш-значение, равное индексу в массиве.


 
@!!ex ©   (2010-01-25 02:31) [14]

> [13] картман ©   (25.01.10 01:59)

Что за волшебный хэш такой?
Никогда не слышал о таком...


 
картман ©   (2010-01-25 10:42) [15]


> @!!ex ©   (25.01.10 02:31) [14]

http://www.ozon.ru/context/detail/id/2640853/ - гл.7


 
@!!ex ©   (2010-01-25 12:07) [16]

Волшебства не произошло... количество коллизий опять же зависит от общего количество элементов. Бесконечное расширение списка тоже не лучший вариант.
Кстати, книга так себе. бинарный поиск можно сделать вообще без сравнений.


 
@!!ex ©   (2010-01-25 12:07) [17]

Ой. Опечатался. не бинарный, а по дереву


 
картман ©   (2010-01-25 12:23) [18]


> @!!ex ©   (25.01.10 12:07) [16]


> количество коллизий опять же зависит от общего количество
> элементов.


количество коллизий зависит от функции хеширования и от соотношения N/Length(hash_array) - у него в словаре 100 тыс, сделай размер массива равный миллиону, как я уже писал, лишние 4 МБ особой роли нее играют.

Что за идея фикс с деревом?


 
@!!ex ©   (2010-01-25 13:03) [19]

> [18] картман ©   (25.01.10 12:23)
> Что за идея фикс с деревом?

Нравятся мне деревья. :) Работают быстро.


 
TUser ©   (2010-01-25 15:09) [20]


> Пожалуйста посоветуйте более быстрое решение для данной
> задачи, и еще словари будет необходимо шифровать. Спасибо.
>

Префиксное дерево в собственном бинарном формате.


 
vuk ©   (2010-01-26 00:16) [21]

Хэш, он штука, конечно, хорошая, но если понадобится искать что-то по части слова, то толку от этого - ноль.


 
Игорь Шевченко ©   (2010-01-26 01:10) [22]

Открыл ради интереса два словаря: англо-русский Мюллера и словарь русского языка Ожегова. В первом 70000 статей, во втором 52000.
Для сегодняшних компьютеров это семечки, если, разумеется, не хранить их в виде XML и не грузить в листбокс. Без всяких хешей, примерно так же, как организуются индексы в базе банных (В+ дерево, например) и скорость поиска будет достаточно приемлемой (причем, как частичное, так и полное совпадение), в качестве бонуса - отсортированный обход.

Собственно, скорость поиска среди триллионов значение достаточно высока, что там говорить про custom-словари :)


 
vuk ©   (2010-01-26 01:52) [23]

При количестве позиций в 70000 даже тупое половинное деление в отсортированном списке найдет нужное максимум за 17 итераций. Вопрос - стоит ли городить огород со всякими наворотами?


 
Игорь Шевченко ©   (2010-01-26 02:21) [24]

vuk ©   (26.01.10 01:52) [23]

Что-то у меня под вечер туго с соображениемт. Для точного поиска потребуется максимум 17 итераций, а для инкрементного ?


 
vuk ©   (2010-01-26 12:51) [25]

to Игорь Шевченко ©   (26.01.10 02:21) [24]:
>а для инкрементного ?

Столько же, если не ошибаюсь.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.063 c
4-1231600539
Nucer
2009-01-10 18:15
2010.08.27
LSP (Layered Service Provider)


2-1270824084
V
2010-04-09 18:41
2010.08.27
CreateDir


2-1268672321
NBAH1990
2010-03-15 19:58
2010.08.27
IP сканер


3-1239559848
Александр Степанов
2009-04-12 22:10
2010.08.27
Проблема с подключением к базе FireBird


15-1272627412
12
2010-04-30 15:36
2010.08.27
EDBEngineError. Cannot load driver. Что можно сделать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский