Prořezávej a hledej (Prune and search) je typ algoritmu založený na vyřazování neperspektivních dat – redukci velikosti problému. Toto paradigma je velmi podobné algoritmům typu rozděl a panuj (divide and conquer), zásadní rozdíl je ovšem v tom, že při prořezávání neprocházíme všechny větve, ale pouze ty, které pro nás dávají smysl.


Příklad

Pokud hledáme n-té nejvyšší číslo v neseřazeném poli, tak by řešením zajisté bylo pole seřadit a podívat se na zadaný index. Toto řešení ovšem není příliš efektivní. Lepším řešením je upravit například Quicksort tak, aby se po rozdělení pole dle pivota prohledávala pouze ta část, která obsahuje řešení - Quicksort v každém svém kroku umístí pivota na korektní místo v seřazeném poli, není proto problém rozhodnout, ve které části se nachází ono hledané číslo.

Složitost

Zatímco asymptotická složitost Quicksortu je O(n^{2}) a očekáváná O(n \\cdot \\log(n)), tak díky eliminaci větví, které nemohou obsahovat řešení, je očekávaná složitost prune and search algoritmu O(c \\cdot n), kde c je malá konstanta.

Kód

   /**
     * Prorezavej a hledej
     * @param array prohledavane pole
     * @param index kolikatou nejvyssi hodnotu hledame (cislovano od 0)
     * @param left prvni levy prvek, na ktery muzeme sahnout
     * @param right prvni prvek, na ktery uz nemuzeme sahnout
     * @return index-ta nejvyssi hodnota
     */
    public static int pruneAndSearch(int[] array, int index, int left, int right) {
        int boundary = left;
        for (int i = left + 1; i < right; i++) { 
            if (array[i] > array[left]) { //primo za pivot posleme vse vetsi, nez je on sam
                swap(array, i, ++boundary);
            }
        }
        swap(array, left, boundary);
        //konec quicksortu

        if (boundary == index) return array[boundary]; //nalezli jsme
        else if (boundary > index) return pruneAndSearch(array, index, left, boundary); //odrizneme pravou vetev
        else return pruneAndSearch(array, index, boundary + 1, right); //odrizneme levou vetev        
    }

    /**
     * Prohodi prvky v zadanem poli
     * @param array pole
     * @param left prvek 1
     * @param right prvek 2
     */
    private static void swap(int[] array, int left, int right) {
        int tmp = array[right];
        array[right] = array[left];
        array[left] = tmp;
    }

Literatura

  • Prune-and-search. In . [s.l.] : [s.n.], 2006 [cit. 2010-03-15]. Dostupné z WWW: <http://www.cs.duke.edu/courses/fall05/cps230/L-03.pdf>.

SEO od společnosti Digital Pylon


Online casino s algoritmem

České casino online online slot-vegas.cz

Hrajte nejlepší hry jako je GoodGame Empire.





Zajímavé články: Jak najít práci snů? Zvolte kariéru v IT!, Češi mají rádi hrací automaty online, Jak funguje algoritmické obchodování Casino, Online výuka Algoritmus a online marketing mají svá pravidla, Automaty, Matematický vliv, Ratings, Jak fungují algoritmy hazardních her online: více znalostí, více peněz, SYPWAI - nástroj pro vědecký vývoj, Vynikají na globálním trhu: Nejlepší vývojáři softwaru pro online výherní automaty, Jak si vybrat nejlepší české online casino, Proč byste měli hrát online casino VPN revoluce, Kde najdeme algoritmy v každodenním životě?, Čeká vás pracovní pohovor mimo město? Podívejte se, jak dokonale zvládnout včasný příchod, 5 úžasných technologií ze světa hazardních her, Mirror and access to Mostbet, Svou kancelář můžete mít stále po ruce, Jaké výhody má digitalizovaná firma oproti off-line konkurenci?, Jaký systém vybrat pro snadné řízení výroby?, Nahradí umělá inteligence ajťáky?, Důvody, proč používat SnapTik ke stahování videí TikTok, Dokonalý den na pláži: Co si vzít s sebou, aby byl výlet zábavný a bezpečný?, Jak přežít dlouhý let?, Go pay GoodGame Empire, Blockchain, Rozhovor


Doporučujeme

Internet pro vaši firmu na míru

https://www.algoritmy.net