Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка массива 
V
    Опции темы
gordmiand
Дата 22.7.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



подскажите пожалуйста программную реализацию самого (наиболее) быстрого алгоритма сортировки (по возрастанию) строк двумерного массива по определенному столбцу (например первому)...в сортируемом массиве порядка 50-70 тыс. записей (строк) и 5 столбцов...
PM MAIL   Вверх
vikaz
Дата 22.7.2009, 14:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12





--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
gordmiand
Дата 23.7.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



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

Добавлено @ 10:52
а как программно можно отсортировать целочисленный массив с помощью StringList-а (его свойства Sort или метода Sorted())???

Это сообщение отредактировал(а) gordmiand - 23.7.2009, 10:53
PM MAIL   Вверх
vikaz
Дата 23.7.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(gordmiand @  23.7.2009,  10:40 Найти цитируемый пост)
хотелось бы получить конкретный алгоритм сортировки двумерного массива, так сказать проверенный на практике и на таких больших объемах данных...


А по ссылкам которые я Вам написал, там что нет такого алгоритма?


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
xvr
Дата 23.7.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



trie дерево. Быстрее врядли получится, хотя памяти может сожрать много



PM MAIL   Вверх
gordmiand
Дата 23.7.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



xvr : а что за "trie дерево"? хотелось бы примерчик сортировки по определенному столбцу двумерного массива с помощью данного дерева...
PM MAIL   Вверх
W4FhLF
Дата 23.7.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



Я правильно понял. У тебя есть что-то типа таблицы, тебе нужно отсортировать эту таблицу по одному столбцу, а остальные строки просто поменять местами в соответствии с отсортированным столбцом? 

Т.е. вот например есть данные:

Цитата

2 26015 22 7681151 422
11 26087 22 7681252 675
3 26023 22 7681162 434
7 26055 22 7681207 954
13 26103 22 7681274 301
6 26047 22 7681196 329
1 26007 22 7681140 432
8 26063 22 7681218 329
14 26111 22 7681285 402
9 26071 22 7681229 320
10 26079 22 7681240 432
12 26095 22 7681263 330
5 26039 22 7681184 933
4 26031 22 7681173 43


Если сортировать их по первому столбцу, то мы должны получить:

Цитата

1 26007 22 7681140 432
2 26015 22 7681151 422
3 26023 22 7681162 434
4 26031 22 7681173 43
5 26039 22 7681184 933
6 26047 22 7681196 329
7 26055 22 7681207 954
8 26063 22 7681218 329
9 26071 22 7681229 320
10 26079 22 7681240 432
11 26087 22 7681252 675
12 26095 22 7681263 330
13 26103 22 7681274 301
14 26111 22 7681285 402


Так? За тем исключением, что у тебя первый столбец это строка. 

Это сообщение отредактировал(а) W4FhLF - 23.7.2009, 15:31


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 23.7.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(gordmiand @ 23.7.2009,  15:04)
xvr : а что за "trie дерево"?

А что, google уже отменили?  smile   http://en.wikipedia.org/wiki/Trie
Цитата

 хотелось бы примерчик сортировки по определенному столбцу двумерного массива с помощью данного дерева...
trie это не совсем сортировка, это скорее способ построить упорядоченный набор строк.
Собственно сам trie представляет собой N дерево, в котором каждая дуга соответствует букве одной или более строк, а узлы представляют собой точки между буквами.
user posted image
Цитата

A trie for keys "A", "to", "tea", "ted", "ten", "i", "in", and "inn"

Сортировка делается в 2 прохода:
1) Все строки из заданного столбца помещаются в trie дерево (вместе с номером строки)
2) Полученное trie дерево рекурсивно обходится, по номерам строк из него строится выходная таблица (вместо таблицы можно построить массив индексов и отображать данные в порядке этих индексов)

PM MAIL   Вверх
gordmiand
Дата 23.7.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



xvr: как-то Вы все очень сложно говорите - деревья....для такой-то задачи...

W4FhLF: Ваши цитаты полностью верны (вот такой целочисленный массив надо отсортировать как Вы и указали в цитатах...токо столбец-это столбец а не как Вы предположили "столбец это строка")...хотелось бы узнать Ваше оптимальное с т.з. скорости решение такой задачки...
PM MAIL   Вверх
W4FhLF
Дата 24.7.2009, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 2
Всего: 121



gordmiand, а как ты хранишь данный массив?

Я для рашения такой задачи использовал следующую структуру хранения данных:

Код

typedef std::vector < std::vector< double > > VecTable;


Т.е. каждый столбец -- это отдельный вектор. 

Что делает сортировку в данном случае медленной? Это перестановка строк. Чтобы переставить строки местами во всех векторах нужен отдельный цикл. Это очень медленно. Выход простой, надо проиндексировать таблицу перед сортировкой и делать перестановки только в нужном столбце (в том, который сортируем) запоминая номера перестановок в отдельном массиве индексов. А после сортировки, за O(n), в соответствии с массивом индексов, делать перестановки оставшихся столбцов. 

Такая сортировка по времени равносильна сортировке одномерного массива + O(n) на перестановку строк после сортировки. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 24.7.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(gordmiand @ 23.7.2009,  21:18)
xvr: как-то Вы все очень сложно говорите - деревья....для такой-то задачи...

А вам надо максимально эффективно и просто? Так не бывает  smile 
Цитата

W4FhLF: Ваши цитаты полностью верны (вот такой целочисленный массив надо отсортировать как Вы и указали в цитатах
Эээ. Trie деревья для строк. Если вам нужно сортировать по числам, то вам это не подойдет.
Для чисел (целых) наиболее быстро будет radix sort (см в google)

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

Если у вас при сортировке будет перестраиваться сама таблица, то это будет медленно, какой бы алгоритм вы не применили  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.