Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Устойчивость алгоритма сортировки, Алгоритм проверки устойчивости алгоритма 
:(
    Опции темы
lmaforl
Дата 7.1.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый вечер, всех с прошедшими праздниками. Может кто-нибудь подсказать (по возможности помочь реализовать) алгоритм проверки устойчивости алгоритма сортировки. Имеется набор сортировок (а именно 8 штук) и мне нужно каждую сортировку проверить на устойчивость.  Т.е. надо придумать такую функцию, которая подавала сортировке на вход файл с элементами, а после их сортировки выводилось сообщение, является ли данная сортировка устойчивой или нет. Заранее благодарю за помощь.
PM MAIL   Вверх
arto
Дата 7.1.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



что такое "устойчивость алгоритма сортировки"?
PM MAIL ICQ   Вверх
lmaforl
Дата 7.1.2011, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Устойчивая (стабильная) сортировка — сортировка, которая не меняет относительный порядок сортируемых элементов, имеющих одинаковые ключи.
допустим дана последовательность: 1а 1в 1с
резултат сортировки:
1) устойчивая 1а 1в 1с
2) неустойчивая 1в 1с 1а (например)
PM MAIL   Вверх
Jimy
Дата 7.1.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Все стандартные методы сортировки уже определены по признаку устойчивости. Какой смысл это тестировать?
Сделать проверку данных можно конечно, сложности не вижу. Могу помочь если есть конкретные вопросы.
PM   Вверх
lmaforl
Дата 7.1.2011, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просто я работаю над задачей сравнения и описания различных видов сортировок. Вот мне и нужно неким скриптом лично доказать устойчивость/неустойчивость того или иного алгоритма сортировки.

"Сделать проверку данных можно конечно, сложности не вижу. "

В каком смысле проверка данных?
PM MAIL   Вверх
Jimy
Дата 8.1.2011, 00:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Задача не сложная.
Каждый сортируемый элемент можно поместить в хэш и добавить ключ со значением его позиции в исходном наборе.
Например, так:
Код

my %element = ('value' => ?, 'pos' => ?);

где value - то что сортируем
pos - позиция этого элемента в исходном наборе.
И для всего исходного набора данных составить массив ссылок на хэши.
Будет что-то типа
Код

my @data = ({'value' => 2, 'pos' => 0}, {'value' => 1, 'pos' => 1}, {'value' => 2, 'pos' => 2});

Затем, выполнив сортировку данного массива нужным алгоритмом по ключам 'value', проверить, если для одинаковых элементов значение pos всегда возрастает, то сортировка устойчивая, иначе - неустойчивая (нестабильная):
Код

my $stable = 1;
for (my $i = 1; $i <= $#data, $i ++) {
    if (($data[$i]->{'value'} eq $data[$i-1]->{'value'}) && ($data[$i]->{'pos'} > $data[$i-1]->{'pos'} ) {
        # сортировка нестабильная
        $stable = 0;
        last;
    }
}

Однако, данная проверка может не выявить нестабильную сортировку на некоторых, неудачно подобранных, исходных данных. Т.е. нужно брать объем исходных данных побольше, и чтобы повторяющихся значений тоже было в достатке разбросано по всему объему.

Добавлено через 3 минуты и 24 секунды
напутал со знаком сравнения позиции элемента.
нужно ">" заменить на "<" и закрывающая круглая скобка пропущена, вот правильно:
Код

if (($data[$i]->{'value'} eq $data[$i-1]->{'value'}) && ($data[$i]->{'pos'} < $data[$i-1]->{'pos'} )) {

PM   Вверх
lmaforl
Дата 8.1.2011, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Jimy
Большое спасибо! Попробую реализовать  smile 
Один только вопрос, а что можно сказать о встроенной сортировки sort? Кроме того что она работает довольно таки очень быстро. 
PM MAIL   Вверх
Jimy
Дата 8.1.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Реализация встроенной сортировки sort отличается в разных версиях perl.
http://search.cpan.org/~jesse/perl-5.12.2/lib/sort.pm
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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