Znalazłem trochę informacji w sieci, pierwszy sposób to Bogosort, algorytm bardzo prosty można przedstawić na przykładzie sortowania tali kart
tasujemy karty sprawdzamy czy są posortowane jeśli nie tasujemy jeszcze raz i tak aż do momentu kiedy talia będzie posortowana. Pesymistyczna złożoności obliczeniowa to O(n*n!), korzystamy z losowych permutacji zbioru co powoduje ze możemy nigdy nie otrzymać posortowanego zbioru. W najlepszym przypadku możemy otrzymać posortowany zbiór po jednym losowaniu permutacji zbioru.
Podobnym algorytmem sortowania do Bogosort jest Bozo sort, także opiera się na losowych permutacjach zbioru. Sprawdzamy czy zbiór jest posortowana jeśli nie wybieramy dwa losowe elementy zbioru i zamieniamy ze sobą i znowu sprawdzamy czy zbiór jest posortowany.
Oba algorytmy są wysoce nieefektywne, i raczej nie przydadzą sie w jakich kolwiek zastosowaniach. W wolnej chwili w ramach ćwiczenia rubiego napisałem kawałeczek kodu realizującego te dwa algorytmy.
class Array
def bogosort!
shake until is_sorted?
self
end
def bozosort!
until is_sorted?
a = rand(size-1)
b = rand(size-1)
self[a], self[b] = self[b], self[a]
end
self
end
def is_sorted?
for i in 0..size-2
if self[i] > self[i+1]
return false
end
end
true
end
def shake
for i in 0..size-1
a = rand(size-1)
self[i], self[a] = self[a], self[i]
end
self
end
end
Przydaly by sie jakies pomiary wydajnosci tego algorytmu z np. qsort :D
Słyszałem kiedyś o takim języku programowania w którym podaje się specyfikację problemu, a on je rozwiązuje. Podobnie działa właśnie dla posortowania danych. Bo naczym polega problem sortowania? Należy znaleźć taką permutację pierwotnej tablicy, aby spełniony był tam jakiś warunek. Ten język programowania zatem sprawdzał po kolei każdą możliwą permutację i sprawdzał dla której owy warunek jest spełniony :) Na stronę trafiłem przypadkiem – myślałem, że opiszesz tutaj algorytm Forda-Johnsona, który to jest sortowaniem prawie optymalnym jeśli chodzi o liczbę dokonywanych porównań ;) Pozdrawiam!
Mozliwe ze tym jezykiem jest Prolog, tam wlasnie opisujesz problem a nie algorytm rozwiazania. W tym semestrze mam go w szkole, ogolnie pokrecenie z poplataniem bo nalezy zupelnie inaczej podejsc do problemu.