Prohledávání do hloubky (depth-first search, DFS) je algoritmus určený k procházení grafu, který má široké uplatnění - jeho principů se využívá při zjišťování počtu komponent, topologického uspořádání nebo detekci cyklů daného grafu.
Princip
Algoritmus zvolí libovolný uzel a označí jej jako otevřený, zpracuje jej a zavolá sám sebe na všechny dosud neobjevené potomky daného uzlu. Po návratu z rekurze uzel označí jako uzavřený. Tímto způsobem dojde k průchodu všech větví grafu do maximální hloubky.
Složitost
Za předpokladu, že lze přistoupit k sousedům daného uzlu v konstantním čase, tak je asymptotická složitost tohoto algoritmu , protože projde každým uzlem i hranou právě jednou.
Kód
/** * Dosud neobjeveny uzel */ private static final int FRESH = 0; /** * Otevreny uzel */ private static final int OPEN = 1; /** * Uzavreny uzel */ private static final int CLOSED = 2; /** * Prohledavani do hloubky (rekurzivne) * * @param graph */ public static void depthFirstSearch(GraphIface graph) { //Stavy jednotlivych uzlu int[] state = new int[graph.getVertexCount()]; for (int i = 0; i < state.length; i++) { state[i] = FRESH; } //zajisti pruchod vsemi komponentami souvislosti for (int i = 0; i < graph.getVertexCount(); i++) { if (state[i] == FRESH) { doDFS(graph, i, state); } } } /** * Provede prohledavani do hloubky * * @param graph graf * @param vertexNr cislo uzlu * @param state stavy uzlu */ private static void doDFS(GraphIface graph, int vertexNr, int[] state) { state[vertexNr] = OPEN; List<GraphNodeIface> succ = graph.getNode(vertexNr).getSuccessors(); for (GraphNodeIface n : succ) { if (state[n.getId()] == FRESH) { doDFS(graph, n.getId(), state); } } state[vertexNr] = CLOSED; } /** * Operace, ktere by mel splnovat graf * * @author Pavel Micka */ public interface GraphIface<ENTITY> { /** * Prida hranu do grafu * * @param from uzel, ze ktereho hrana vychazi * @param to uzel, do ktereho hrana vede */ public void addEdge(int from, int to); /** * Vrati pocet hran grafu * * @return pocet hran grafu */ public int getEdgeCount(); /** * Vrati uzel s danym identifikatorem * * @param id * @return */ public GraphNodeIface getNode(int id); /** * Vrati pocet vrcholu grafu * * @return pocet vrcholu grafu */ public int getVertexCount(); /** * Odstrani hranu, v pripade vicenasobneho vyskytu odstrani prvni vyskyt * * @param from uzel, ze ktereho hrana vychazi * @param to uzel, do ktereho hrana vede */ public void removeEdge(int from, int to); /** * Operace, ktere by mel splnovat uzel grafu * * @param <ENTITY> */ public interface GraphNodeIface<ENTITY> { /** * @return the id */ public int getId(); /** * @return the successors */ public List<GraphNodeIface> getSuccessors(); /** * @return the value */ public ENTITY getValue(); /** * @param value the value to set */ public void setValue(ENTITY value); } }
Literatura
- KOLÁŘ, Josef. Teoretická informatika. 2. vyd. Praha : Česká informatická společnost, 2004. 205 s. ISBN 80-900853-8-5.
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