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

Вниз

Скорость...   Найти похожие ветки 

 
roadstar ©   (2004-03-17 15:24) [0]

Народ! Кто знает компонент, который работает с элементами быстрее, чем TList?
Заранее благодарен за ответы.


 
Digitman ©   (2004-03-17 15:27) [1]


> компонент, который работает с элементами быстрее, чем TList


с чего ты взял, что он "медленно работает" ?


 
Романов Р.В. ©   (2004-03-17 15:28) [2]

TList не навороченый компонент так что работает довольно быстро. Какие операции требуется выполнять быстрее?


 
Игорь Шевченко ©   (2004-03-17 15:34) [3]


> Кто знает компонент, который работает с элементами быстрее,
> чем TList


Статический массив с выключенной опцией Range Check :)


 
RoadStar ©   (2004-03-17 15:35) [4]


> Digitman

Попробуй добавить 200000 указателей, а потом удалить эдак 50000 в любых местах. Довольно вяло получается, хотя добовляет он быстро!


> Романов Р.В.


Операции удаления элементов из списка (указателей).


 
Романов Р.В. ©   (2004-03-17 15:37) [5]

Связаный список


 
Романов Р.В. ©   (2004-03-17 15:40) [6]

Или удаляй врукопашную.
Если удаляешь в середине. Перемести хвостовые элементы вперед и удали последние.


 
Digitman ©   (2004-03-17 15:44) [7]


> добавить 200000 указателей, а потом удалить эдак 50000 в
> любых местах


кто ж тебя заставляет их удалять ?) разумеется, всякий раз вызывается Move(), что и сказывается неблаготворно на общей производительности алгоритма ..

ты не удаляй элемент, а пиши в него nil

когда же возникает необходимость добавления нового эл-та (не в ходе первоначального заполнения, а уже в ходе последующей работы, когда первоначально заполненный список подвергается модификациям), ищи первое же вхождение nil-эл-та в списке и пиши туда новое значение


 
RoadStar ©   (2004-03-17 15:48) [8]


> Романов Р.В.

Надо, чтоб список оставался отсортированным, поэтому перенос с конца не подойдет


 
Digitman ©   (2004-03-17 15:55) [9]


> RoadStar


> Надо, чтоб список оставался отсортированным


TList не имеет автосортировки после изменения его состояния
если же ты к месту и не к месту вызываешь Sort() после каждой модификации списка - это твои проблемы ... значит, алгоритм не продуман ... и никакой иной списочный класс в этом случае не поможет тебе


 
RoadStar ©   (2004-03-17 15:58) [10]


> Digitman

Sort() я и не вызываю, список формируется из файла, в котором записи уже отсортированы!


 
Digitman ©   (2004-03-17 16:11) [11]


> RoadStar ©   (17.03.04 15:58) [10]


тогда я вообще не вижу проблем..

вместо явного удаления пиши nil в соотв.элемент
при этом список остается отсортированным - достаточно при его считывании/сканировании просто игнорировать nil-элементы

естественно, ощутимый выиинрыш в производительности алгоритма, построенного по такой логике, ты получишь только в том случае, если список заполняется однократно (при первоначальном считывании из файла), а затем его эл-ты лишь многократно считываются и/или удаляются тобой (т.е. операции вставки/модификации, требующие после выполнения немедленной сортировки обновленного списка, либо отсутствуют либо минимальны)


 
Игорь Шевченко ©   (2004-03-17 16:14) [12]


> Надо, чтоб список оставался отсортированным


1) А как ты определяешь критерий для сортировки ?

2) Посмотри, как работает в classes.pas TStringList с свойством sorted равным true, сделай свой список по образу и подобию, все же быстрее будет.


 
Digitman ©   (2004-03-17 16:29) [13]


> Игорь Шевченко


С чего бы быстрее-то , Игорь ?

Если у автора в какие-то моменты времени производятся  массированные удаления произвольно выбираемых эл-тов, после чего состояние сортированности списка должно быть автоматически сохраняться либо быть явно восстановлено, то нет ничего дурнее автосортировки, подразумеваемой под Sorted = True .. после каждой модификации списка он будет подвергаться явно неоправданной сортировке ..

Удалил (записал nil) он блок из произвольно отобранных им по каким-то секретным критериям 50000 элементов, вызвал однократно после этой акции сортировку - и готово ! Быстро и со вкусом)


 
Игорь Шевченко ©   (2004-03-17 16:42) [14]

Digitman ©   (17.03.04 16:29)

Разумно, о массовом удалении я как-то не подумал...


 
RoadStar ©   (2004-03-17 16:49) [15]

Спасибки всем за ответы!!!


 
Mim   (2004-03-17 18:16) [16]

Я вот думаю что проблема что tlist хранит
свои элементы в виде массива
то есть
oooooooooooooooqiwoooooo

и   при удалении элемента i
ему приходтся переписывать все позжестоящие элементы по направлению вверх

oooooooooooooooqwoooooo

Если бы заменить массик на список элементов хранящих ссылки на предидущий и след элемент то удаление можно значительно упрастить

o <> q <> i <> w <> o

при удалении элемента i надо поравить ссылкук элемента q и ц

o <> q <> w <> o

Но в таком  подходе усложняется доступ например к 5 му элементу, то есть доступ к элементу по номеру.


 
Тимохов ©   (2004-03-17 18:57) [17]

сделал свой аналог tlist, поудалял 50тыс,поставил на место удаленных nil, потом бежишься и двигаешь не весь массив, а только до следующего пустого места.
очень быстро.



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

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.031 c
1-1079421490
Ш-К
2004-03-16 10:18
2004.04.04
XML. Format and Indent


14-1078577675
Julia
2004-03-06 15:54
2004.04.04
Объявление


4-1074600279
Alexander
2004-01-20 15:04
2004.04.04
Как прочитать из commdlg.dll текстовый ресурс


7-1073914819
Sergant
2004-01-12 16:40
2004.04.04
Прямая работа с портами


9-1063370175
lds
2003-09-12 16:36
2004.04.04
Старая добрая игра Элита (ZX-Spectrum)





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