- 23, Oct 2024
- #1
Введение
Эта задача касается трех (плохих) алгоритмов сортировки:
и два других варианта, которые придумал я (но, вероятно, в какой-то момент о них подумали другие):
56781234 7 10 7
BOGOSORT
56781234
37485612
28471653
46758123
46758123
12685734
27836451
12345678
BOGOSWAP
56781234
16785234
17685234
12685734
12685743
12685734
12485763
12385764
12385764
12345768
12345678
BOGOSMART
56781234
16785234
12785634
12785364
12785364
12385764
12385674
12345678
(AKA Bozosort) and Bogoswap
.
Bogosort
works by completely shuffling the array randomly and checking if it becomes sorted (ascending). If not, repeat.
87654321 1000000 100 1
37485612 9050000 9000 10
12345678 0 0 0
28746351 4344 5009 5
18437256 10000 523 25
15438762 10000 223 34
18763524 58924 23524 5
34652817 9283 21 445
78634512 5748 234 13
24567351 577 24 34
works by selecting two elements, randomly, and swapping them. Repeat until sorted (ascending).
Bogosmart
works by selecting two elements, randomly, and only swapping them if it makes the array closer to being sorted (ascending), ie. if the element with the lower index was originally larger than the one with the higher. Repeat until sorted.
Вызов
В этой задаче исследуется эффективность (или отсутствие) каждого из этих трех алгоритмов сортировки. Кодекс игры в гольф будет
сгенерировать перетасованный массив из 8 элементов целых чисел от 1 до 8 включительно (продолжайте читать, чтобы узнать, как это делать);
применить каждый алгоритм к этому массиву; и
отобразите исходный массив, за которым следует количество вычислений, необходимое для каждого алгоритма, разделенное одним пробелом (конечный пробел ок), в формате
Bogoswap
.
Программа создаст 10 тестовых случаев; вы можете сгенерировать все десять вначале или сгенерировать по одному, как угодно. Пример вывода ниже.
Подробности:
Для Bogosort
, it should record the number of times the array was shuffled.
Для <ARRAY> <BOGOSORT> <BOGOSWAP> <BOGOSMART>
, it should record the number of swaps made.
Для Bogosmart
, it should record the number of swaps made.
Пример вывода:
Bogoswap
Я выдумал эти цифры; конечно, ваша программа выведет другой результат, но в том же формате.
Правила
- Вся случайность, используемая в вашей программе, должна исходить от доступных вам генераторов псевдослучайных чисел и в противном случае не должна тщательно вычисляться вами. Вам не нужно беспокоиться о семенах.
- Программы не имеют ограничений по времени.
- Массивы должны быть отсортированы по возрастанию.
- Завершающие пробелы или дополнительная новая строка не имеют большого значения.
- Для
Bogosort
, the array is to be shuffled using any unbiased shuffling algorithm such as Fisher-Yates or Кнут перетасовывает, прямо указано в вашем объяснении. Встроенные методы перетасовки не допускаются. Сгенерируйте тестовые массивы таким же образом. - Если после перетасовки или замены массив остается прежним, он все равно учитывается и должен быть включен в счет программы. Например, перетасовка массива сама по себе считается перетасовкой, а замена элемента самим собой считается перестановкой, даже если ни одна из этих операций не меняет массив.
- Если мне не изменяет память, массив из 8 элементов не должен занимать слишком много времени для любого из трех алгоритмов. На самом деле, я несколько раз подумал о массиве из 10 элементов, когда попробовал:
Bogosmart
only required a few thousand (or less) actual shuffles and well under 10 seconds. - Ваш код должен фактически сортировать массивы, а не просто выдавать ожидаемые значения или математические вычисления для ожидаемого ответа.
- Это соревнование по кодированию, поэтому побеждает самая короткая программа в байтах.
Вот несколько примеров шагов для каждого алгоритма сортировки:
Bogoswap
В этом случае программа выведет Bogosort
, and then do the same thing 10 times. You do not have to print the arrays while sorting is going on, but I gave the above sample steps so you can understand how each algorithm works and how to count computations.
#код-гольф #случайный #сортировка