0 / 0 / 0
Регистрация: 28.10.2016
Сообщений: 7
|
|
1 | |
Отсортировать 8 чисел только 16 сравнениями14.11.2016, 01:14. Показов 1813. Ответов 15
Метки нет (Все метки)
0
|
14.11.2016, 01:14 | |
Ответы с готовыми решениями:
15
Как доказать, что невозможно отсортировать 8 чисел менее чем 16 сравнениями? Отсортировать в двумерном массиве целых случайных чисел только четные строки Отсортировать в двумерном массиве целых случайных чисел только четные строчки. Использовать метод Пузырька Отсортировать одномерный массив только по возрастанию и только четные |
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
||||||
14.11.2016, 10:33 | 2 | |||||
обычна сортировка выбором для случая когда нужно все переставить сделает именно столько сравнений.
если начальное расположение цифр будет иным и какие то цифры стоят на "своем" месте - сравнений будет меньше
0
|
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
|
|
14.11.2016, 11:16 | 4 |
GbaLog-, да, я не прав, посчитал перестановки
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
14.11.2016, 12:34 | 5 |
Сообщение было отмечено GbaLog- как решение
Решение
Ну алгоритм тут довольно хитрый (описан у Кнута) и с не очень большой практической ценностью. Обычный merge sort отсортирует за 17 сравнений и это будет намного практичнее.
А за 16 сравнений это делается так: 1. Сначала сортируем элементы в парах, на что понадобится 4 сравнения [b1][a1] [b2][a2] [b3][a3] [b4][a4] Теперь у нас b1 < a1, b2 < a2 и т.д. 2. Теперь полностью упорядочиваем между собой пары по возрастанию старших элементов пар a . На это потребуется 5 сравнений[b1][a1] [b2][a2] [b3][a3] [b4][a4] То есть пусть теперь у нас a1 < a2 < a3 < a4 и в то же время b1 < a1, b2 < a2 и т.д. 3. Теперь мысленно извлекаем элементы b из последовательности [a1][a2][a3][a4] и вставляем их по одному обратно в правильные места в такой очередности: b1, b3, b2, b4. 3.1. b1 уже находился на своем месте, поэтому мы вставляем его обратно без сравнения вообще [b1][a1][a2][a3][a4] 3.2. b3 (который меньше a3) должен попасть куда-то до a3. На бинарный поиск места для вставки среди 3 элементов надо 2 сравнения. Тут могут получиться разные варианты: [b3][b1][a1][a2][a3][a4] [b1][b3][a1][a2][a3][a4] [b1][a1][b3][a2][a3][a4] [b1][a1][a2][b3][a3][a4] 3.3. b2 (который меньше a2) должен попасть куда-то до a2. Обратите внимание, что область поиска в любом случае - 3 или 2 элемента. На бинарный поиск места для вставки надо 2 сравнения. Количество возможных исходов тут вырастает и я их "рисовать" не буду. 3.4. b4 (который меньше a4) должен попасть куда-то до a4. Тут просто делается бинарный поиск места для вставки среди 6 элементов, на который надо 3 сравнения. Все. Итого 4+5+2+2+3 = 16 сравнений. Уменьшение количества сравнений возникает за счет хитрого выбора порядка вставки элементов b обратно в последовательность. И порядок этот диктуется так называемыми Числами Якобсталя.
3
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
14.11.2016, 12:51 | 7 |
Трудно сказать... При упоминании железа на ум сразу приходят сети сортировки. Но в сетях сортировки порядок сравнений жестко прошит заранее и из-за этого сравнений (компараторов) получается больше. 8 элементов - 19 компараторов минимум.
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
14.11.2016, 19:12 | 9 |
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
14.11.2016, 19:31 | 11 |
Таблица справа в
https://en.wikipedia.org/wiki/... ort_a_list содержит известные результаты. Расхождение с теоретической нижней границей начинается с 12 элементов, но периодически возвращается на границу.
1
|
14.11.2016, 19:46 | 12 |
В железных алгоритмах (например, в микросхеме), насколько я понимаю, наиболее критичным является количество тактов. Типа того, что 4 сравнения можно выполнять параллельно (одновременно)
0
|
0 / 0 / 0
Регистрация: 28.10.2016
Сообщений: 7
|
|
14.11.2016, 20:05 [ТС] | 13 |
TheCalligrapher, "Тут просто делается бинарный поиск места для вставки среди 6 элементов, на который надо 3 сравнения."
Я не совсем поняла, как это достижимо? Если, например, у меня ряд [b1] [b2] [a1] [a2] [b3] [a3] [a4], то с чем именно мне сравнивать b4,чтобы получилось за 3 срнвнения?
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
14.11.2016, 20:37 | 14 |
b4 заведомо меньше, чем a4. То есть вам надо вставить b4 слева от a4. Это запросто делается бинарным поиском за 3 сравнения. Например, в вашем варианте, начнем со сравнения с a2
Код
b4 < a2 => b4 < b2 => b4 < b1 - вставляем слева от b1 => b4 > b1 - вставляем слева от b2 => b4 > b2 => b4 < a1 - вставляем слева от a1 => b4 > a1 - вставляем слева от a2 b4 > a2 => b4 < b3 - вставляем слева от b3 => b4 > b3 => b4 < a3 - вставляем слева от a3 => b4 > a3 - вставляем слева от a4
0
|
0 / 0 / 0
Регистрация: 28.10.2016
Сообщений: 7
|
|
03.12.2016, 21:56 [ТС] | 15 |
Добавлено через 1 минуту
TheCalligrapher, Добрый день! Снова всплыл вопрос. Но разве это не 5 сравнений? Ведь сравниваем а4 с 5 остальными элементами.. Добавлено через 6 минут Добавлю, что задание раположить элементы в возрастающей последовательности,сравнивая и перестанавливая после сравнения. В visual basic. Типа: If a>b then x=a a=b b=x
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
03.12.2016, 22:18 | 16 |
Ничего не понял. Какое еще a4? a4 мы вообще не трогаем.
И откуда взялось 5? Приведенная диаграмма - это это диаграмма "ветвления" выполняющегося кода (блок-схема, если хотите). Диаграмма выполняется слева-направо. Какой бы мы путь выполнения слева-направо ни выбрали, количество фактически выполненных сравнений равно 3 (или 2). Ну тут вы уже начинаете изобретать что-то новенькое. Приведенный мною выше алгоритм работает именно так - сравнивает и переставляет. А уж сколько перестановок он выполняет после каждого сравнения - это деталь реализации, к нашему разговору пока никакого отношения не имевшая. Минимизация количества сравнений и минимизация количества перестановок - две очень разные, независимые темы. Пока что о минимизация количества перестановок речи не шло вообще. Что же касается минимизация количества сравнений, то для 8 элементов меньше 16 получить невозможно и алгоритм приведен выше.
1
|
03.12.2016, 22:18 | |
03.12.2016, 22:18 | |
Помогаю со студенческими работами здесь
16
Отсортировать только по возростанию Массив целых чисел отсортировать по убыванию и определить число соседствующих чисел с суммой равной 20 Отсортировать только простые числа в массиве В одномерном массиве отсортировать только положительные элементы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |