Перестановки |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Перестановки |
gamordzhoba |
Сообщение
#1
|
Гость |
Дана перестановка. Наименьшее число обменов, чтобы ее отсортировать.
Входные данные Число N (1 <= N <= 10000), затем перестановка. Выходные данные Выведите ответ. Пример Ввод 5 1 4 3 5 2 Вывод 2 Что то не получается. |
klem4 |
Сообщение
#2
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
провести сортировку и подсчитать кол-во перестановок ? Если массив менять не надо то просто сдлать ф-ю, параметром которой будет массив, а возвращать она будет кол-во перестановок, ну а в ней уже использовать например метод пузырька ... а как интересно еще можно подсчитать число перестановок ?!
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
virt |
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: 6 |
немного не то :
массив 4 3 2 1 можно отсортировать за 2 операции обмена ,а пузырек отсортирует за 6. Аналогично и для любой другой сортировки можно составить подобный тест. Задачи решается динамически (не путать с динамической памятью) ,только сейчас не знаю как. ЗЫ можно и перебором ,но это очень долго. -------------------- |
volvo |
Сообщение
#4
|
Гость |
Нашел вот такой алгоритм (на форуме AlgoList-а) :
Цитата Объясню алгоритм на примере: нам дано 5 чисел (перестановка) 4 3 2 5 1 Чтобы 1 оказалось на своем месте, нужно куда-то деть 4. Лучше деть 4 на ее место. Но тогда нужно деть куда-то 5. А 5 нужно деть туда, где 1! Поэтому требуется найти все такие цепочки чисел a1,a2,..ak, где a1 стоит на месте a2, a2 стоит на мете a3 и т.д., ak стоит на месте a1. В этом примере будут такие цепочки: 4 1 5 3 2 А наименьшее количество таких перемещений, за которое можно это дело отсортировать, есть сумма длин всех таких цепочек. То есть эта сумма равна количеству элементов, которые не совпадают с номером своего места. Поэтому когда у нас не перестановка, а просто набор чисел, нужно сначала подсчитать порядковую статистику каждого элемента (O(n*log(n)), если использовать быструю сортировку), а потом подсчитать количество элементов, которые стоят "не на своем месте". Это количество и есть минимальное возможное число перемещений. |
Atos |
Сообщение
#5
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Цитата А наименьшее количество таких перемещений, за которое можно это дело отсортировать, есть сумма длин всех таких цепочек. А вот и неточность, правильно сумма уменьшенных на единицу длин цепочек. Ведь, например, для цепочки из двух элементов мы можем вернуть их на свои места за один обмен.Но в общем идея ясна, достаточно простой линейный алгоритм получается... |
gamordzhoba |
Сообщение
#6
|
Гость |
нифига парни не получается. мож я вас не так понял, но я делаю и не получается.
|
volvo |
Сообщение
#7
|
Гость |
Покажи, как делаешь...
|
roma |
Сообщение
#8
|
Гость |
Вот недавно делал похожую прогу, вот что из нее получилось:
|
Текстовая версия | 20.05.2024 8:54 |