![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение строк для сортировки (Алгоритм) [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