![]() |
|
|
![]()
|
|
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
подскажите пожалуйста программную реализацию самого (наиболее) быстрого алгоритма сортировки (по возрастанию) строк двумерного массива по определенному столбцу (например первому)...в сортируемом массиве порядка 50-70 тыс. записей (строк) и 5 столбцов...
|
|||
|
||||
| vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
http://algolist.manual.ru/sort/index.php
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%...B%D0%B0#C.2B.2B http://ru.wikipedia.org/wiki/Quicksort#.D0....B8.D1.82.D0.BC http://www.cyberguru.ru/cpp-sources/algori...ov-massiva.html Это сообщение отредактировал(а) vikaz - 22.7.2009, 14:47 -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
хотелось бы получить конкретный алгоритм сортировки двумерного массива, так сказать проверенный на практике и на таких больших объемах данных...
Добавлено @ 10:52 а как программно можно отсортировать целочисленный массив с помощью StringList-а (его свойства Sort или метода Sorted())??? Это сообщение отредактировал(а) gordmiand - 23.7.2009, 10:53 |
|||
|
||||
| vikaz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 10 Всего: 12 |
А по ссылкам которые я Вам написал, там что нет такого алгоритма? -------------------- ![]() Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
trie дерево. Быстрее врядли получится, хотя памяти может сожрать много
|
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
xvr : а что за "trie дерево"? хотелось бы примерчик сортировки по определенному столбцу двумерного массива с помощью данного дерева...
|
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
Я правильно понял. У тебя есть что-то типа таблицы, тебе нужно отсортировать эту таблицу по одному столбцу, а остальные строки просто поменять местами в соответствии с отсортированным столбцом?
Т.е. вот например есть данные:
Если сортировать их по первому столбцу, то мы должны получить:
Так? За тем исключением, что у тебя первый столбец это строка. Это сообщение отредактировал(а) W4FhLF - 23.7.2009, 15:31 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А что, google уже отменили?
Собственно сам trie представляет собой N дерево, в котором каждая дуга соответствует букве одной или более строк, а узлы представляют собой точки между буквами.
Сортировка делается в 2 прохода: 1) Все строки из заданного столбца помещаются в trie дерево (вместе с номером строки) 2) Полученное trie дерево рекурсивно обходится, по номерам строк из него строится выходная таблица (вместо таблицы можно построить массив индексов и отображать данные в порядке этих индексов) |
||||||
|
|||||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
xvr: как-то Вы все очень сложно говорите - деревья....для такой-то задачи...
W4FhLF: Ваши цитаты полностью верны (вот такой целочисленный массив надо отсортировать как Вы и указали в цитатах...токо столбец-это столбец а не как Вы предположили "столбец это строка")...хотелось бы узнать Ваше оптимальное с т.з. скорости решение такой задачки... |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 2 Всего: 121 |
gordmiand, а как ты хранишь данный массив?
Я для рашения такой задачи использовал следующую структуру хранения данных:
Т.е. каждый столбец -- это отдельный вектор. Что делает сортировку в данном случае медленной? Это перестановка строк. Чтобы переставить строки местами во всех векторах нужен отдельный цикл. Это очень медленно. Выход простой, надо проиндексировать таблицу перед сортировкой и делать перестановки только в нужном столбце (в том, который сортируем) запоминая номера перестановок в отдельном массиве индексов. А после сортировки, за O(n), в соответствии с массивом индексов, делать перестановки оставшихся столбцов. Такая сортировка по времени равносильна сортировке одномерного массива + O(n) на перестановку строк после сортировки. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
А вам надо максимально эффективно и просто? Так не бывает
Для чисел (целых) наиболее быстро будет radix sort (см в google) Еще есть у меня подозрение, что вам нужна не максимально быстрая сортировка, а другая форма представления таблицы (например через индексы строк). Если у вас при сортировке будет перестраиваться сама таблица, то это будет медленно, какой бы алгоритм вы не применили |
||||
|
|||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |