Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.06;
Скачать: CL | DM;

Вниз

Быстрый поиск числа в списке   Найти похожие ветки 

 
Юра   (2003-01-29 11:03) [0]

В процессе работы программы генерируется около 1000 чисел. Необходимо сохранить их, исключив повторы, и потом быстро искать. Функция поиска имеет возвращает TRUE, если искомое найдено, и FALSE в противном случае.
Возможные решения:
1. Порождаю класс от TList. Внутри числа в нем отсортированы по возрастанию. Поиск производится методом половинного деления.
2. Не надо изобретать велосипед - в TStringList это все уже реализовано. В сортированном списке строк поиск так и осуществляется.
3. Иное.
На каком варианте мне лучше остановиться?


 
REA   (2003-01-29 11:07) [1]

От сколько до скольки числа? Что важнее - память или быстродействие?


 
Anatoly Podgoretsky   (2003-01-29 11:11) [2]

Лучще рстановиться на массиве


 
Юра   (2003-01-29 11:14) [3]

Числа - LongInt, от 0. Важнее быстродействие.


 
REA   (2003-01-29 11:19) [4]

При генерации какое-нибудь дерево можно построить - искать будет проще. Алгоритмы поиска были на "алгоритмах", у Кнута что-то было.


 
Юра   (2003-01-29 11:19) [5]

> Anatoly Podgoretsky

Т.е. обычный отсортированный массив, поиск методом деления пополам?


 
Anatoly Podgoretsky   (2003-01-29 11:24) [6]

Да, тут и скорость и минимум памяти


 
Sha   (2003-01-29 11:50) [7]

Может это сгодится:
http://delphibase.endimus.com/?action=viewfunc&topic=matharray&id=10383


 
REA   (2003-01-29 11:55) [8]

Кстати в D7 есть THashedStringList, TBucketList - может что пригодится.


 
han_malign   (2003-01-29 12:11) [9]

>>Юра (29.01.03 11:19)
>>> Anatoly Podgoretsky
>>Т.е. обычный отсортированный массив, поиск методом деления пополам?

>>Anatoly Podgoretsky © (29.01.03 11:24)
>>Да, тут и скорость и минимум памяти

На счет скорости вы зря - копирование блока памяти размером до 1000*sizeo(longint) - довольно долгая операция

Самый быстрый метод - бинарное дерево, причем, для увеличения скорости и уменьшения фрагментации, память под узлы можно выделить заранее - памяти жрет всего в 3 раза больше(sizeof(longint)+2*sizeof(pointer))...


 
Anatoly Podgoretsky   (2003-01-29 12:21) [10]

Ты откуда взял про копирование, ведь уже не утро?
Поиск в несбалансированном дереве приблизается по скорости к линейному поиску.


 
han_malign   (2003-01-29 12:37) [11]

>Ты откуда взял про копирование
а как вы собираетесь новый элемент в начало/середину не пустого массива вставлять?
Несбалансированное дерево - это да - это плохо, но ведь можно и сбалансировать...



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

Текущий архив: 2003.02.06;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.009 c
3-15484
Наташа
2003-01-20 18:01
2003.02.06
Sql запрос


1-15643
Darkwin
2003-01-28 14:43
2003.02.06
Как вывести сообщение, что программа на нём не останавливалась?


3-15516
b_baranov
2003-01-20 19:45
2003.02.06
Create table in SP


1-15673
Tsr
2003-01-20 21:07
2003.02.06
: Unsafe type TBookmark


8-15764
Stelh
2002-10-23 16:09
2003.02.06
Работа с Web-камерой





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский