Автор Тема: Оптимизация сортировки  (Прочитано 2898 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Billi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Оптимизация сортировки
« : 02 Декабря 2003, 14:35:21 »
Соритрую 2-х мерный массив по 2м ключам, соритровка выполняется давольно длительное время (4000 значений сортируюся приблезительно 4 секунды)
Исходник ......
................
@finally = map {$_->
  • ;}

sort{$a_->[1] cmp $b_->[1] || $a_->[2] <=> $b_->[2]}
map{[$_,$_->
  • ,$_->[2]]}@finded;

.................
Можноли как то ускорить данный процесс?
Но я хотя бы знаю, что ни чего не знаю

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Оптимизация сортировки
« Ответ #1 : 02 Декабря 2003, 14:50:33 »
А что если попробовать СУБД?

ps: Может и  без того способ есть, правда, понять это видя 3 строчки кода и не видя задачи довольно "сложно".
0 OK, 0:1

Оффлайн Billi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 60
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Оптимизация сортировки
« Ответ #2 : 02 Декабря 2003, 15:44:57 »
На MySQL пробовал, бытрее но в том вся и тема что надо на перл реализовать.
Суть задачи проста - есть таблица
Название товара и  Цена
Надо отсортировать товар сначала по типу а внутри типа по цене.
Но я хотя бы знаю, что ни чего не знаю

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Оптимизация сортировки
« Ответ #3 : 02 Декабря 2003, 17:17:22 »
Вот выбрал время и подумал над твоей задачей:
-------
# Наберем массив:
my @mass = ();
for (1..4000) {
  my $tmp = [];
  for my $n (1..10) {
    push @$tmp, int(rand(20000));
  }
  push @mass, [ genrstr(int rand(64)), $tmp ]; # genrstr - возвращает абракадабру заданой длины
}

# и отсортируем

my $time = gettimeofday; # засекаем время

$_->[1] = [ sort {$a <=> $b} @{$_->[1]} ] for @mass;
@mass = sort {$a->
  • cmp $b->
  • } @mass;


print gettimeofday - $time; # 0,35 сек (с map\'ами выходило больше)
-----

Зы:  Если мимо, то уж в следующий раз поточнее опиши условия. И ненадо так утрамбовывать код - его потом прочитать нельзя.
0 OK, 0:1

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Оптимизация сортировки
« Ответ #4 : 02 Декабря 2003, 22:51:12 »
Billi
Ну а алгоритмы сортировки посмотреть? Того же Кнута почитать? :)
2B OR NOT 2B = FF

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28