Myślałem o sortowaniu algorytmów w oprogramowaniu i możliwych sposobach pokonania O(nlogn)
przeszkody. Nie sądzę, że w praktyce możliwe jest szybsze sortowanie, więc proszę, nie myśl, że tak.
Mając to na uwadze, wydaje się, że w przypadku prawie wszystkich algorytmów sortowania oprogramowanie musi znać położenie każdego elementu. Co ma sens, w przeciwnym razie skąd miałoby wiedzieć, gdzie umieścić każdy element według jakichś kryteriów sortowania?
Ale kiedy skrzyżowałem to myślenie ze światem rzeczywistym, wirówka nie ma pojęcia, w jakiej pozycji znajduje się każda cząsteczka, kiedy „sortuje” cząsteczki według gęstości. W rzeczywistości nie dba o pozycję każdej cząsteczki. Jednak może sortować biliony na tryliony elementów w stosunkowo krótkim czasie, ze względu na fakt, że każda cząsteczka podlega prawom gęstości i grawitacji - co dało mi do myślenia.
Czy byłoby możliwe, gdyby jakiś narzut na każdym węźle (pewna wartość lub metoda przypisana do każdego z węzłów) „wymusił” kolejność na liście? Coś w rodzaju wirówki, w której tylko każdy element dba o swoje względne położenie w przestrzeni (w stosunku do innych węzłów). A może to narusza jakąś zasadę obliczeniową?
Myślę, że jedną z najważniejszych kwestii, o których tu mowa, są kwantowe efekty natury i ich zastosowanie równolegle do wszystkich cząstek jednocześnie.
Być może klasyczne komputery z natury ograniczają sortowanie do domeny O(nlogn)
, gdzie komputery kwantowe mogą przekroczyć ten próg do O(logn)
algorytmów działających równolegle.
Fakt, że wirówka jest zasadniczo równoległym sortowaniem bąbelkowym, wydaje się być poprawny, co ma złożoność czasową wynoszącą O(n)
.
Wydaje mi się, że następną myślą jest to, że jeśli natura może sortować O(n)
, dlaczego nie mogą tego robić komputery?