Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение строк для сортировки (Алгоритм) [D6, Win2k]


mOOx_ ©   (2004-07-13 16:03:00) 

Добрый день.
Вот какая задача возникла. Требуется отсортировать массив строк (список логов) в хронологическом порядке. Может кто подскажет быстрый алгоритм, а то мне кажется, что то, что пришло мне в голову, лучше вообще не пробовать реализовать :)
Заранее спасибо.


Думкин   (2004-07-14 07:23:00) [1]

Быстрая сортировка может реализовываться разно, при определенных оптимизациях по сравнению со стандартной(в VCL etc) можно добиться существенного ускорения. У меня при сортировке 50000 строк среднее число сравнений упало с 1 500 000 до 700-800 000. Это конечно далеко не лог, но все-таки.
Описано сие у Бакнелла, примеры на сайте www.diasoft.kiev.ua - как примеры к его книге.

Гы. Можно конечно БД какой-нить худой с индексами.


Igorek   (2004-07-13 19:37:00) [2]


> Скоро уже для for I := 0 to N do будут компоненты искать...
> :(

С чем и боремся. :-)


> mOOx_ ©   (13.07.04 16:03)  

Вообще совет. Напиши раз и навсегда для себя универсальную быструю сортировку. В том смысле, что сортирует что угодно и требует только ф-цию сравнения. Хотя такая и есть во многих библиотеках.
А ф-цию сравнения ты можешь написать сам - выдирать из двух входных строк дату/время и сравнивать.

---
Ознакомься с шаблонными ф-циями в С++.


mOOx_   (2004-07-13 16:38:00) [3]

Да не так уж и быстро - раз в день. Это логи ИИСа. Кстати, может и еще что подскажете вообще по проблеме. См. мой следующий вопрос.


mOOx_   (2004-07-13 16:35:00) [4]

Да не в фор дело. Просто сам алгоритм сравнения интересен. Да и сам вопрос даже носит больше любознательный характер :). На готовом-то ясное дело - проще...а вот этот алгоритмик бы глянуть. Хотя в ВЦЛ и так все через АПИ сделано, куда уж быстрее :)...


mOOx_   (2004-07-13 16:35:00) [5]

Да не в фор дело. Просто сам алгоритм сравнения интересен. Да и сам вопрос даже носит больше любознательный характер :). На готовом-то ясное дело - проще...а вот этот алгоритмик бы глянуть. Хотя в ВЦЛ и так все через АПИ сделано, куда уж быстрее :)...


Digitman   (2004-07-13 16:35:00) [6]


> А может и вообще стоило без массивов, а сразу в лист


если лог интенсивно обновляется, ни массивы ни стринг-листы, ни иные "ВЦЛ"-листы - не панацея


Sandman25   (2004-07-13 16:29:00) [7]

А в чем проблема с самостоятельной реализацией QuickSort?
Скоро уже для for I := 0 to N do будут компоненты искать... :(


Семен Сорокин   (2004-07-13 16:27:00) [8]


> А может и вообще стоило без массивов, а сразу в лист

вот это правильно будет см. [1].


mOOx_   (2004-07-13 16:25:00) [9]

я тоже так думал, но вот встретилось пару раз :(


mOOx_   (2004-07-13 16:23:00) [10]

это мне в голову первоначально и пришло :). Только потом обратно из стринглиста в массив..., конечно я тут может и за доли секунды борюсь, но всетаки...
Но и на этом спосибо, порылся в ВЦЛ, вроде нашел :)...еще раз большое фенкс, буду эксперимантировать...
А может и вообще стоило без массивов, а сразу в лист... может кто со скоростью экспериментировал уже?


oldman   (2004-07-13 16:22:00) [11]

Гы... А ты их в массив записывай по мере поступления - они запишутся в хронологическом порядке...
:)))


Digitman   (2004-07-13 16:17:00) [12]


> в хронологическом порядке


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

ну и коль так, то класс TStringlist, имея готовые встр.алгоритмы сортировки, может при опред.раскладе избавить от необходимости изобретения очер.велосипеда ..


Тимохов   (2004-07-13 16:04:00) [13]

1. один лог - record имя+ дата
2. запихиваете это все в tlist
3. делаете sort


Наверх

Титульная страница Поиск, карта сайта Написать письмо