Więc scalanie to algorytm dzielenia i zdobywania. Kiedy patrzyłem na powyższy schemat, zastanawiałem się, czy można w zasadzie ominąć wszystkie kroki podziału.
Jeśli iterowałeś po oryginalnej tablicy podczas przeskakiwania o dwa, możesz uzyskać elementy o indeksie i i i + 1 i umieścić je w ich własnych sortowanych tablicach. Po uzyskaniu wszystkich tych pod-tablic ([7,14], [3,12], [9,11] i [2,6], jak pokazano na schemacie), możesz po prostu przejść do normalnej procedury scalania, aby uzyskać posortowana tablica.
Czy iteracja po tablicy i natychmiastowe generowanie wymaganych pod-macierzy jest mniej wydajne niż wykonywanie kroków podziału w całości?
algorithms
sorting
efficiency
mergesort
Jimmy_Rustle
źródło
źródło
Odpowiedzi:
Pomyłka wynika z różnicy między koncepcyjnym opisem algorytmu a jego implementacją .
Logiczne scalanie sortowania jest opisywane jako podział tablicy na mniejsze tablice, a następnie scalenie ich z powrotem. Jednak „dzielenie tablicy” nie oznacza „tworzenia całkowicie nowej tablicy w pamięci” lub czegoś podobnego - można ją zaimplementować w kodzie jako
tzn. nie ma miejsca żadna faktyczna praca, a „podział” jest czysto koncepcyjny. To, co sugerujesz, z pewnością działa, ale logicznie nadal „dzielisz” tablice - po prostu nie potrzebujesz do tego żadnej pracy z komputera :-)
źródło
1<<n+1
. Chociaż jestem pewien, że możesz dostosować rzeczy, aby zbyt mały ogon wtapiał się w dolne przejście.Myślę, że masz na myśli implementację oddolną . W implementacji oddolnej zaczynasz od elementów pojedynczej komórki, przesuwając się w górę, łącząc elementy w większe posortowane listy / tablice. Wystarczy odwrócić strzałki na powyższym rysunku, zaczynając od środkowej tablicy, tj. Tablic jednoelementowych.
Możesz także zoptymalizować sortowanie przez scalanie , dzieląc tablice, aż osiągną pewien stały rozmiar, a następnie po prostu posortuj je, używając na przykład sortowania wstawianego.
W przeciwnym razie sortowanie bez podziału tablicy nie jest możliwe. W rzeczywistości istotą sortowania scalającego jest dzielenie i sortowanie podcieni, tj. Dzielenie i podbijanie.
źródło