Jgrapht: NaiveLcaFinder์˜ ๋ฒ„๊ทธ

์— ๋งŒ๋“  2018๋…„ 02์›” 14์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jgrapht/jgrapht

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ๋„ํŠธ ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋™์•ˆ ๋ชจ๋“  LCA๊ฐ€ Robert ๋ฐ Cersei ์—ฌ์•ผ ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋Œ€์‹  ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋ฒ„๊ทธ์ธ์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ์ด ๋ฒ„๊ทธ๋Š” NaiveLcaFinder์˜ findLcas ๊ธฐ๋Šฅ์— ์žˆ์Šต๋‹ˆ๋‹ค.

<strong i="9">@Test</strong>
    public void testPseudoLcas(){
     public final String NL = "\n";
        String input = "digraph GOT {"+NL+
            "graph [ bgcolor = whitesmoke ]"+NL+
            "subgraph cluster_stark {"+NL+
                "style = filled ;"+NL+
                "color = lightblue ;"+NL+
                "label = \" House Stark \" ;"+NL+
                "node [ style = filled , color = white ];"+NL+
                "Rickard ;"+NL+
                "Brandon ; Eddard ; Benjen ; Lyanna ;"+NL+
                "Robb ; Sansa ; Arya ; Brandon ; Rickon ;"+NL+
                "node [ shape = doublecircle , style = filled , color = white ];"+NL+
                "Jon ;"+NL+
                "Rickard -> Brandon ;"+NL+
                "Rickard -> Eddard ;"+NL+
                "Rickard -> Benjen ;"+NL+
                "Rickard -> Lyanna ;"+NL+
                "Eddard -> Robb ;"+NL+
                "Eddard -> Sansa ;"+NL+
                "Eddard -> Arya ;"+NL+
                "Eddard -> Brandon ;"+NL+
                "Eddard -> Rickon ;"+NL+
                "Eddard -> Jon [ label = \" bastard \" , color = azure4 ];"+NL+
            "}"+NL+
            "subgraph cluster_baratheon {"+NL+
                "style = filled ;" +NL+
                "color = chocolate3 ;" +NL+
                "label = \" House Baratheon \" ;" +NL+
                "node [ style = filled , color = white ];" +NL+
                "Ormund ; Steffon ; Robert ; Stannis ; Renly ; Shireen ; Joffrey ; Myrcellar ; Tommen ;" +NL+
                "Ormund -> Steffon ;" +NL+
                "Rhaelle -> Steffon ;" +NL+
                "Ormund -> Rhaelle ;" +NL+
                "Rhaelle -> Ormund ;" +NL+
                "Steffon -> Robert ;" +NL+
                "Steffon -> Stannis ;" +NL+
                "Steffon -> Renly ;" +NL+
                "Stannis -> Shireen ;" +NL+
                "Robert -> Joffrey ;" +NL+
                "Robert -> Myrcellar ;" +NL+
                "Robert -> Tommen ;" +NL+
            "}" +NL+
            "subgraph cluster_lannister {"+NL+
                "style = filled ;"+NL+
                "color = cornsilk3 ;"+NL+
                "label = \" House Lannister \" ;"+NL+
                "node [ style = filled , color = white ];"+NL+
                "Tywin ; Joanna ; Jaime ; Cersei ; Tyrion ;"+NL+
                "Tywin -> Joanna ;"+NL+
                "Joanna -> Tywin ;"+NL+
                "Joanna -> Jaime ;"+NL+
                "Joanna -> Cersei ;"+NL+
                "Joanna -> Tyrion ;"+NL+
                "Tywin -> Jaime ;"+NL+
                "Tywin -> Cersei ;"+NL+
                "Tywin -> Tyrion ;"+NL+
                "Jaime -> Cersei ;"+NL+
                "Cersei -> Jaime ;"+NL+
                "Robert -> Cersei ;"+NL+
                "Cersei -> Robert ;"+NL+
                "Cersei -> Joffrey ;"+NL+
                "Cersei -> Myrcellar ;"+NL+
                "Cersei -> Tommen ;"+NL+
                "Jaime -> Joffrey [ style = dashed ];"+NL+
                "Jaime -> Myrcellar [ style = dashed ];"+NL+
                "Jaime -> Tommen [ style = dashed ];"+NL+
            "}"+NL+
            "Lyanna -> Rhaegar [ style = dashed , label = \" ? \" ];"+NL+
            "Rhaegar -> Lyanna [ style = dashed , label = \" ? \" ];"+NL+
            "Lyanna -> Jon [ style = dashed , label = \" ? \" ];"+NL+
            "Rhaegar -> Jon [ style = dashed , label = \" ? \" ];"+NL+
            "labelloc = \" t \" ;"+NL+
            "fontsize =50;"+NL+
            "fontcolor = lightslategrey ;"+NL+
            "fontname = \" Bookman Old Style Bold Italic \" ;"+NL+
            "label = \" Game of Thrones Family Tree \""+NL+
            "}" ; 

            VertexProvider<String> vp = (a, b) -> a;
        EdgeProvider<String, DefaultEdge> ep = (f, t, l, a) -> new DefaultEdge();
        GraphImporter<String, DefaultEdge> importer = new DOTImporter<String, DefaultEdge>(vp, ep);
        DirectedPseudograph<String, DefaultEdge> graph = new DirectedPseudograph<String, DefaultEdge>(DefaultEdge.class);
        try {
            importer.importGraph(graph, new StringReader(input));
        } catch (ImportException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    NaiveLcaFinder<String, DefaultEdge> graphFinder = new NaiveLcaFinder<>(graph);
        checkLcas(graphFinder, "Joffrey", "Tommen", Arrays.asList("Robert"));
    }

๋ชจ๋“  13 ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

NaiveLcaFinder ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ฐฉํ–ฅ์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋งŒ ํ™•์ธํ•˜๊ณ  ์‚ฌ์ดํด์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. LCA๋Š” DAG์—์„œ ์ฐพ์•„์•ผ ํ•˜์ง€๋งŒ ์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๋‚˜์ค‘์— ๊ทธ๊ฒƒ์ด DAG๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. DAG๊ฐ€ ๋˜์–ด์•ผ ํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ์ด ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ด๊ฒƒ์„ ์ˆ˜ํ‘œ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๊ณ„์‚ฐ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๋Š” ๊ฒƒ๊ณผ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์ž…๋ ฅ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด์—๋Š” ํ•ญ์ƒ ์ ˆ์ถฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. GraphTest์— isDirectedAcyclicGraph ๋ฉ”์†Œ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  2. NaiveLCA ์ฝ”๋“œ์—์„œ ์–ด์„ค์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. assert GraphTests.isDirectedAcyclicGraph(g); ์•„๋งˆ๋„ NaiveLCA์—์„œ๋Š” ์ž…๋ ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ DAG์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฌธ์„œ/๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์–‘์—์„œ ๋” ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. jgrapht์—๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ๊ธฐ์ ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งŽ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  isDirectedAcyclicGraph ํ…Œ์ŠคํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค(์ด๊ฑด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค).

๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ DAG๊ฐ€ ํ•„์š”ํ•˜๋„๋ก NaiveLcaFinder ์ƒ์„ฑ์ž๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. isDirectedAcyclicGraph ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ž‘์—…์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ž˜ํ”„์— ์ฃผ๊ธฐ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋‘˜ ๋‹ค ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ isDirectedAcyclicGraph ๊ตฌํ˜„์„ ๊ณ„์†ํ•ด๋„ ๋ฉ๋‹ˆ๊นŒ?

@hulk-baba ์ž…๋ ฅ ํŒŒ์ผ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "Robert Cersei"(์‹ค์ œ๋กœ ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Cersei์—์„œ Robert๋กœ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ํŒŒ์ผ์—์„œ Robert์—์„œ Cersei๋กœ)๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„์„ ์‹คํ–‰ํ•  ๋•Œ Cersei๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ.

์ž…๋ ฅ ํŒŒ์ผ์„ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐพ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค(๋˜๋Š” Lannister/Baratheon ํ•˜์œ„ ๊ทธ๋ž˜ํ”„์˜ ์ผ๋ถ€๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ ๋” ์‰ฌ์šด ๋” ์ž‘์€ ๊ทธ๋ž˜ํ”„๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค).

@AlexandruValeanu Joffrey Tommen ์ฝ”๋“œ checkLcas(graphFinder, "Joffrey", "Tommen", Arrays.asList("Robert")); ์—์„œ์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋™์ผํ•œ ์ž…๋ ฅ ํŒŒ์ผ๋กœ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค

@hulk-baba ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณตํ†ต ์กฐ์ƒ ์„ธํŠธ๋Š” [Robert, Cersei, Jaime] ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ฝ”๋“œ ์กฐ๊ฐ์€ ์กฐ์ƒ ์„ธํŠธ์— ์ž์‹์ด ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Cersei์—์„œ Robert์™€ Jaime๊นŒ์ง€, ๊ทธ๋ฆฌ๊ณ  Robert์—์„œ Cersei๊นŒ์ง€ ์—์ง€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ ๊ฐœ ๋ชจ๋‘ ๊ณตํ†ต ์กฐ์ƒ ์ง‘ํ•ฉ์—์„œ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค). .

๊ทธ๋ž˜ํ”„๊ฐ€ DAG๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Robert์™€ Cersei ์‚ฌ์ด์˜ ์ฃผ๊ธฐ๋Š” Lannister/Baratheon ํ•˜์œ„ ๊ทธ๋ž˜ํ”„์—์„œ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•จ).

๊ฐ€๋Šฅํ•œ ์ˆ˜์ • ์‚ฌํ•ญ:

  • Robert์—์„œ Cersei๊นŒ์ง€์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ "Robert"๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ฒฝ์šฐ findLca๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฃผ๊ธฐ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ์ฃผ๊ธฐ์—์„œ๋Š” ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์ดํด์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์ด ๊ตฌํ˜„์˜ ๋ชฉ์ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@AlexandruValeanu ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  Robert ์—์„œ Cersei ๋กœ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๊นŒ?
ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ˆœํ™˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅ์ด ์—†์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Joffrey ๋ฐ Cersei ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ถœ๋ ฅ์€ Cersei ์ž…๋‹ˆ๋‹ค. Cersei ๋Š” ์ฃผ๊ธฐ์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ LCA์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ detectCyclesContainingVertex ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž…๋ ฅ ๋…ธ๋“œ๊ฐ€ ์ฃผ๊ธฐ์˜ ์ผ๋ถ€์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ true์ด๋ฉด LCA ์—†์ด ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์›Œ๋ฐ์—… ์šด๋™์—์„œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ œ๊ฐ€ ์ด๊ฒƒ์„ ์ž˜๋ชป ์ดํ•ดํ–ˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋„๋ก ๋„์™€์ฃผ์„ธ์š”.

@tibrewalpratik17
ํ•ด๋‹น pdf์˜ ๊ทธ๋ž˜ํ”„๋Š” DAG๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ฐ€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค . NaiveLcaFinder ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์ž…๋ ฅ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์›Œ๋ฐ์—… ์ฑŒ๋ฆฐ์ง€์˜ ๊ฒฝ์šฐ ๋” ์ด์ƒ ์‚ฌ์ดํด์ด ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. CycleDetector ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ๋ฒ„์ „์— ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

findLcas ์˜ ๊ตฌํ˜„์€ ์ˆœํ™˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ํ•ฉ๋ฆฌ์ ์ธ ๋Œ€๋‹ต์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ˆœํ™˜์„ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ ํ˜„๋ช…ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, undefined behaviour ). ๋”ฐ๋ผ์„œ ์ „์ œ ์กฐ๊ฑด์ด ๊นจ์กŒ๋‹ค๋ฉด ์ถœ๋ ฅ์„ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@AlexandruValeanu ์ข‹์•„์š”... ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆœํ™˜ ๊ทธ๋ž˜ํ”„์— ๋“ค์–ด๊ฐ€์„œ ์ถœ๋ ฅ์„ ๊ธฐ๋Œ€ํ•˜๋ฉด ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ์ตœ๊ทผ ์กฐ์ƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ˆœํ™˜์— ๊ด€๋ จ๋˜๊ฑฐ๋‚˜ ๋…ธ๋“œ ์ž์ฒด์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์œ ํšจํ•œ ์ถœ๋ ฅ์ด null์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

์‚ฌ์šฉ์ž๋Š” ๋Œ€๋‹ต์„ ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ์ž…๋ ฅ์„ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. f์˜ ๋„๋ฉ”์ธ์ด ์•„๋‹ˆ๋ผ ์ž…๋ ฅ x์— ๋Œ€ํ•ด f(x)๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋‹ต์€ null์ด ์•„๋‹ˆ์ง€๋งŒ ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@tibrewalpratik17
NaiveLcaFinder ๋Š” DAG๊ฐ€ ์ „๋‹ฌ๋œ ๊ฒฝ์šฐ์—๋งŒ ์˜ฌ๋ฐ”๋ฅธ lcas ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ์ด DAG๊ฐ€ ์•„๋‹ˆ๋ฉด ์ถœ๋ ฅ์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‚ด ๊ตฌํ˜„์ด ์ฃผ๊ธฐ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ lcas๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹ต๋ณ€์ด undefined ์ธ์ง€ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

IngerMathilde picture IngerMathilde  ยท  5์ฝ”๋ฉ˜ํŠธ

simlu picture simlu  ยท  14์ฝ”๋ฉ˜ํŠธ

jsichi picture jsichi  ยท  12์ฝ”๋ฉ˜ํŠธ

io7m picture io7m  ยท  53์ฝ”๋ฉ˜ํŠธ

nikhilbhardwaj picture nikhilbhardwaj  ยท  3์ฝ”๋ฉ˜ํŠธ