2015-01-02 3 views
0

Мне нужна помощь со следующей проблемой, которую я нашел в учебнике.Алгоритм сортировки с бесконечными свопами

sort (array[], nr_of_item) 
{ 
    while(true) 
    i:=value from an n-sided fair dice roll 
    j:=value from an n-sided fair dice roll 
    if (i > j) 
     swap i and j 
    if (array[i] > array [j]) 
     swap array[i] and array[j] 
    end while 
} 

Теперь он говорит, что не описывает правильный алгоритм. Но тогда они говорят:

Через некоторое время массив должен быть отсортирован и доказать, что количество сравнений для сортировки массива равно O (n^3), если вход не сортирован.

Еще один вопрос:

проверить, если алгоритм сортировки массива в O (п)

Я действительно не могу понять, как вы могли бы доказать это из-за хаотичности I и J ,

+0

Я думаю, это вероятностная вещь. По мере увеличения количества итераций вероятность того, что массив несортирована, уменьшается, и, вероятно, существует асимптотическая связь. – Barmar

+0

, но здесь ваша петля работает бесконечно, я имею в виду, что останавливает или прерывает ваше время()? –

+0

Он не предназначен для остановки. Алгоритм, приведенный в учебнике, неверен, потому что он никогда не останавливается. Но эти два вопроса должны по-прежнему отвечать. – user3143696

ответ

0

i и j относится к индексу, а j всегда скорректирован так, чтобы быть большим из двух. Это означает, что элемент, указанный индексом i, обозначенный как x, будет располагаться слева от элемента с индексом j, обозначенным как y.

Затем поменять элемент, только если y и x являются несортированными, что означает x больше y и положение их индексация, находятся слева от y, и, следовательно, выходит из строя. Это гарантирует, что функция только приближается (не дальше) к отсортированному состоянию.

Теперь, что касается сложности, представьте себе сортировку пузырьков, которая предназначена для итерации по массиву, в отличие от произвольного выбора. Это имеет сложность n-квадрата. Однако здесь есть что-то еще. Вы произвольно выбираете два элемента и, следовательно, n-выбираете-1 раз сложность сортировки пузырьков, которая становится n-кубической.

Каждый вызов функции выполняет два сравнения, в частности 2. Поэтому сложность представляет собой n-кубическое время 2, которое можно обозначить с помощью обозначения большого О, как n-cubed.

+0

Ваш (статистический) анализ в параграфе 3, предложение 3, не содержит прав. –

+0

@ Питер hmm ... Да, я бы сам согласился с тобой. Хотелось бы увидеть, как кто-то справится с этой сложностью. –

+0

Рассмотрите случай, когда осталось только N свопов, особенно потому, что наименьший элемент в последнем месте, а не первый, а все остальные - только одна позиция вне места, Сколько будет проведено сравнение, прежде чем все необходимые свопы будут генерируется в правильном порядке? –

Смежные вопросы