Oszd meg és fogadd el az inversions számát az array - stack overflow orosz nyelvben

Van egy olyan függvény, amely inverzokat számol egy olyan tömbben, amely O (n2) időt igényel:

A töredék szétválogatásának és a hódításnak a módja is van. amelyhez O (n * log (n)) idő szükséges:

Meg kell valósítani az algoritmust az inverzok számlálására egy tömbben a megosztás és a hódítás megközelítésével. amelyhez O (n * log (n)) idő szükséges.

Sajnos meglehetõsen nehéz megérteni a rekurziót, amikor az elsõ módszer másik módszert nevez, a másik pedig az elsõ módszert nevezi meg.

Su November 16, 14, 9:24 am

Először foglalkoznia kell az egyesítéssel, nevezetesen az algoritmus fogalmának megértéséhez, majd az inversion kezeléséhez.

Röviden beszélek: a tömböt két részre osztjuk, ezek mindegyik része két részre osztható, stb. Míg részei nem egy elemből állnak. A partícionálás után az egyes részpárokat egyesítjük úgy, hogy a kapott rész sortoljon - egy elem elemeit hasonlítjuk össze a másik elemével, és a kapott sorrendbe írjuk őket. Ezután vissza kell párosítanunk az eredményeket, és így tovább. amíg nincs egy részünk, amely egy válogatott tömb lesz.

A szöveget nehéz megérteni, ezért javaslom, hogy nézd meg a grafikus bemutatót (ugyanazon wikipedián van egy hifa). Ha megérted az ötletet, akkor már beillesztheted a megvalósítást.

Amikor mi egyesítése a két rész, mint mondtam, összehasonlítjuk az elemek egy (első bal) elemei a többi (jobbra, a második) oldalán, ill. És ha a bal oldali elem nagyobb, mint a jobb oldali elem, akkor ez az inverzió.
És mivel a bal oldali összes többi elem is nagyobb lesz, mert a bal és a jobb oldalak rendezése. Ezért az inversziók számát meg kell növelni a fennmaradó elem + 1 (aktuális elem) számával.

Az indexelés 0-ból származik. Nem írtam le, hogy elemeket adunk hozzá a kapott részhez, azt hiszem ez érthető. Csak azokat az alkatrészeket írja le, amelyekben vannak inverzok. Hibák lehetségesek, mert gyorsan. Igen, és annyira kompakt módon illesztették az elemeket, hogy a kép teljes egészében megjelenjen a hashcode-on.