Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Сортировка двумерного массива |
Автор: Gekt0r 23.2.2010, 01:06 |
Задача следующая. Есть двумерный массив, очень большой, на несколько тысяч строк Надо его отсортировать по заданному столбцу О_о вопрос, как это можно сделать, чтобы было не слишком долго? Есть идея сделать столбцы строками, и сортировать каждую строку по очереди. Только вот как, у меня знаний не хватает.. Подскажите, плз) |
Автор: Gekt0r 23.2.2010, 01:33 |
так, пока можно не отвечать... Что затупил под вечер, сейчас процесс пошел) |
Автор: sir_nuf_nuf 23.2.2010, 12:02 |
это маааахонький массивчик |
Автор: kavkaz 24.2.2010, 19:50 | ||
Если я вас правильно понял, то вам нужно преобразование Шварца. Пример:
Нужно прокомментировать? |
Автор: klem4 24.2.2010, 20:01 | ||
А зачем вообще мап ?
Добавлено через 59 секунд хотя на самом деле TIMTOWTDI |
Автор: wanick 25.2.2010, 02:08 | ||
ну или так
и не забывай что <=> числовое сравнение а cmp, выполняет алфавитную сортировку в ASCII-порядке |
Автор: amg 25.2.2010, 07:55 |
Преобразование Шварца здесь в самом деле ни к чему. Это преобразование применяется, когда для получения величины, по которой будет сортировка, нужны времязатратные вычисления. Типичный пример, который обычно приводят - сортировка файлов по времени. @sorted_files = sort { -M $a <=> -M $b } @files; При обычной сортировке массива из 1000 файлов медленная операция -M (медленная потому что обращается к диску) будет исполняться около 13000 раз (2*N*ln N). @sorted_files = map {$_->[0]} sort { $a->[1] <=> $b->[1] } map { [ $_, -M $_ ] } @files; С преобразованием Шварца -M будет исполняться только 1000 раз (N). |
Автор: gcc 25.2.2010, 21:51 | ||
а интересно квантовый алгоритм будет ли быстрее работать?
|
Автор: sir_nuf_nuf 28.2.2010, 12:08 | ||
не, не будет. У вас же обычный, а не квантовый компьютер, поэтому намного эффективней чем QuickSort вы не получите. Вообще сортировать двумерный массив по N ому столбцу нужно так:
klem4, Заметьте, что массив @bigarray - это массив ссылок (ARRAYREFов), поэтому при его сортировке никаких тяжелых операций копирования не происходит. Просто переставляются ссылки (обычные скаляры). |
Автор: gcc 28.2.2010, 15:57 |
sir_nuf_nuf, понтяно, тут вот написано что квантовый алгоритм Гровера быстрее чем любая РСУБД http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%93%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B0 |
Автор: gcc 2.4.2010, 06:39 | ||||
кстате, это все таки интересная штука Quantum::Superpositions; получается поиск по массиву быстрее чем map foreach grep exists (хеш) void у любом случае... этов mod_perl: (в CGI будет другие цифры, наверное)
Добавлено @ 06:44 mvsgt, ну там по ссылке вроде бы написано что нету других алгоритмов... А по другой ссылке написано, что будет быстрее чем база данных http://www.opennet.ru/docs/RUS/perl_obzor/files/quantium.html |