คำถามติดแท็ก trees

คำถามเกี่ยวกับกราฟชนิดพิเศษ ได้แก่ กราฟที่เชื่อมต่อและไม่มีวงจร

2
BIT: สัญชาตญาณที่อยู่เบื้องหลังต้นไม้ดัชนีแบบไบนารีคืออะไรและคิดอย่างไร?
ต้นไม้ดัชนีแบบไบนารีมีวรรณกรรมน้อยมากหรือค่อนข้างน้อยเมื่อเทียบกับโครงสร้างข้อมูลอื่น ๆ สถานที่เดียวซึ่งจะมีการเรียนการสอนเป็นTopCoder กวดวิชา แม้ว่าการสอนจะเสร็จสมบูรณ์ในคำอธิบายทั้งหมด แต่ฉันไม่สามารถเข้าใจสัญชาตญาณที่อยู่เบื้องหลังต้นไม้เช่นนั้นได้หรือไม่ มันถูกคิดค้นขึ้นมาได้อย่างไร? หลักฐานที่แท้จริงของความถูกต้องคืออะไร?

3
เส้นทางที่ยาวที่สุดในต้นไม้ที่ไม่ได้ถูกส่งทิศทางด้วยการสำรวจเส้นทางเดียว
มีอัลกอริธึมมาตรฐานนี้สำหรับการค้นหาเส้นทางที่ยาวที่สุดในต้นไม้ที่ไม่ได้ใช้เส้นทางโดยใช้การค้นหาสองครั้งแรก: เริ่ม DFS จากจุดสุดยอดแบบสุ่มและหาจุดสุดยอดที่ไกลที่สุดจากมัน บอกว่ามันเป็นวี 'vvvv′v′v' ตอนนี้เริ่ม DFS จากเพื่อค้นหาจุดสุดยอดจากนั้น เส้นทางนี้เป็นเส้นทางที่ยาวที่สุดในกราฟv′v′v' คำถามคือสิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพมากขึ้น? เราสามารถทำได้ด้วย DFS หรือ BFS เดียวได้หรือไม่? (สิ่งนี้สามารถอธิบายได้อย่างเท่าเทียมกันว่าเป็นปัญหาของการคำนวณเส้นผ่านศูนย์กลางของต้นไม้ที่ไม่ได้บอกทิศทาง)

2
ความแตกต่างระหว่างต้น Radix กับ Patricia คืออะไร?
ฉันกำลังเรียนรู้เกี่ยวกับต้นไม้ Radix (หรือที่เรียกว่าพยายามบีบอัด) และ Patricia พยายาม แต่ฉันค้นหาข้อมูลที่ขัดแย้งกันว่าจริงหรือไม่ ต้นไม้ radix สามารถรับได้จาก trie ปกติ (ไม่บีบอัด) โดยการรวมโหนดกับพาเรนต์เมื่อโหนดเป็นชายด์เดียว นี่ก็ถือเป็นความพยายามของ Patricia โครงสร้างข้อมูลทั้งสองแตกต่างกันอย่างไร? ตัวอย่างเช่นNISTแสดงรายการทั้งสองเหมือนกัน: ต้นแพทริเซีย (โครงสร้างข้อมูล) คำจำกัดความ: การนำเสนอแบบย่อของ trie ซึ่งโหนดใด ๆ ที่เป็นชายน์เดียวถูกรวมเข้ากับพาเรนต์ รู้จักกันในชื่อ radix tree แหล่งข้อมูลมากมายบนเว็บอ้างสิทธิ์เหมือนกัน อย่างไรก็ตามเห็นได้ชัดว่า Patricia พยายามเป็นกรณีพิเศษของต้นไม้ Radix รายการWikipediaพูดว่า: PATRICIA พยายามคือ Radix จะพยายามด้วย Radix เท่ากับ 2 ซึ่งหมายความว่าแต่ละบิตของคีย์จะถูกเปรียบเทียบเป็นรายบุคคลและแต่ละโหนดจะเป็นสองทาง (เช่นซ้ายกับขวา) สาขา ฉันไม่เข้าใจสิ่งนี้จริงๆ ความแตกต่างในวิธีเปรียบเทียบเท่านั้นเมื่อทำการค้นหา แต่ละโหนดจะเป็น "สาขาสองทาง" ได้อย่างไร …

2
เหตุใด C ประเภทโมฆะจึงไม่คล้ายกับประเภทที่ว่าง / ด้านล่าง
Wikipedia ตลอดจนแหล่งข้อมูลอื่น ๆ ที่ฉันได้พบรายการvoidประเภทC เป็นหน่วยประเภทซึ่งตรงข้ามกับประเภทที่ว่างเปล่า ฉันพบว่ามันสับสนเพราะฉันคิดว่าvoidเหมาะกับนิยามของประเภทที่ว่าง / ล่าง ไม่มีค่านิยมใด ๆ อยู่voidเท่าที่ฉันจะบอกได้ ฟังก์ชั่นที่มีประเภทคืนค่าเป็นโมฆะระบุว่าฟังก์ชั่นจะไม่ส่งคืนสิ่งใดดังนั้นจึงสามารถทำงานได้เพียงผลข้างเคียงเท่านั้น ตัวชี้ชนิดvoid*เป็นชนิดย่อยของชนิดตัวชี้อื่นทั้งหมด นอกจากนี้การแปลงไปยังและจากvoid*ใน C นั้นเป็นนัย ผมไม่แน่ใจว่าถ้าจุดสุดท้ายมีบุญใด ๆ ที่เป็นข้อโต้แย้งสำหรับvoidการเป็นประเภทที่ว่างเปล่าเป็นมากหรือน้อยเป็นกรณีพิเศษที่มีความสัมพันธ์ไม่มากที่จะvoid*void ในทางกลับกันvoidตัวมันเองไม่ใช่ประเภทย่อยของประเภทอื่นทั้งหมดซึ่งเท่าที่ฉันสามารถบอกได้ว่าเป็นข้อกำหนดสำหรับประเภทที่จะเป็นประเภทด้านล่าง
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

7
อัลกอริทึมในการค้นหาเส้นผ่านศูนย์กลางของต้นไม้โดยใช้ BFS / DFS ทำไมมันทำงาน
นี้การเชื่อมโยงให้อัลกอริทึมสำหรับการหาขนาดเส้นผ่าศูนย์กลางของต้นไม้ไม่มีทิศทางใช้ BFS สรุป: รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้ ทำไมมันทำงาน หน้า 2 ของสิ่งนี้ให้เหตุผล แต่มันทำให้เกิดความสับสน ฉันกำลังอ้างอิงส่วนเริ่มต้นของการพิสูจน์: รัน BFS บนโหนดใด ๆ ในกราฟโดยระลึกถึงโหนดที่ค้นพบล่าสุด รัน BFS จากการที่คุณจดจำโหนด v ที่พบล่าสุด d (u, v) คือเส้นผ่านศูนย์กลางของต้นไม้ ความถูกต้อง: ให้ a และ b เป็นสองโหนดใด ๆ ที่ d (a, b) คือเส้นผ่านศูนย์กลางของต้นไม้ มีเส้นทางที่ไม่ซ้ำกันจาก …

5
การบีบอัดที่มีประสิทธิภาพของต้นไม้ที่ไม่มีชื่อ
พิจารณาต้นไม้ไบนารีแบบไม่มีป้ายกำกับ เราสามารถบีบอัดต้นไม้ดังกล่าวเมื่อมีการชี้ไปยัง subtreesและกับ (การตีความความเท่าเทียมกันของโครงสร้าง) เราเก็บ (WLOG)และแทนที่คำแนะนำทุกคนที่จะกับตัวชี้ไปยังTดูคำตอบของ uliสำหรับตัวอย่างT ′ T = T ′ = T T ′ TTTTT'T′T'T= T'T=T′T = T'===TTTT'T′T'TTT ให้อัลกอริทึมที่ใช้ต้นไม้ในความหมายข้างต้นเป็นอินพุตและคำนวณจำนวนโหนดที่เหลือหลังจากการบีบอัด อัลกอริทึมควรใช้ในเวลาที่ (ในรูปแบบค่าใช้จ่ายในเครื่องแบบ) กับจำนวนโหนดในการป้อนข้อมูลnO (nบันทึกn )O(nlog⁡n)\cal{O}(n\log n)nnn นี่เป็นคำถามสอบและฉันไม่สามารถหาวิธีแก้ปัญหาที่ดีและฉันไม่ได้เห็น

1
เหตุใดการเขียนโปรแกรมแบบไม่ทำงานจึงค้นคว้าต้นไม้แบบไดนามิก
ต้นไม้ไดนามิกมีบทบาทสำคัญในการแก้ปัญหาต่าง ๆ เช่นการไหลของเครือข่ายกราฟไดนามิกปัญหา combinatorial ("Dynamic Trees in Practice" โดย Tarjan และ Werneck) และเมื่อเร็ว ๆ นี้ได้รวมพจนานุกรม ("A Mergeable Dictionary" โดย Adam Karczmarz) โดยต้นไม้ไดนามิกฉันอ้างถึงคำจำกัดความที่ระบุไว้ในกระดาษของ Sleator & Tarjan "โครงสร้างข้อมูลสำหรับต้นไม้ไดนามิก" ในปี 1983 ความพยายามน้อยได้รับการเผยแพร่ภายในขอบเขตการวิจัยการเขียนโปรแกรมการทำงานตั้งแต่ เอ็ดเวิร์ด Kmett ดำเนินการรุ่นของต้นไม้ ST ส่วนใหญ่เป็นคำแปลของภาษา C ++ คู่ให้ดูต้นไม้ Link-ตัด Chris Okasaki เขียนการนำต้นไม้ Splay ไปใช้อย่าง จำกัด ในหนังสือที่โด่งดังของเขา Ralf Hinze และ Ross Paterson …

5
การใช้ "ต้นไม้" เร็วที่สุดในวิทยาการคอมพิวเตอร์คืออะไร?
ฉันมีคำถามประวัติเล็กน้อยคือตามที่ชื่อบอกว่าฉันกำลังมองหาการใช้ต้นไม้ในช่วงต้น (เช่นโครงสร้างข้อมูลต้นไม้ค้นหาอะไรก็ตาม) ในสาขาวิทยาศาสตร์คอมพิวเตอร์

1
เรื่อง“ ความสูงเฉลี่ยของต้นไม้เครื่องบินที่ปลูก” โดย Knuth, de Bruijn และ Rice (1972)
ฉันพยายามหากระดาษคลาสสิกในชื่อโดยใช้วิธีการเบื้องต้นเท่านั้น (ไม่มีฟังก์ชั่นการสร้างไม่มีการวิเคราะห์ที่ซับซ้อนไม่มีการวิเคราะห์ฟูริเยร์) แม้ว่าจะมีความแม่นยำน้อยกว่ามาก ในระยะสั้นผม "เท่านั้น" ต้องการที่จะพิสูจน์ว่าค่าเฉลี่ยความสูงชั่วโมงnชั่วโมงnh_nของต้นไม้ที่มีโหนด (นั่นคือจำนวนสูงสุดของโหนดจากรากใบ) ตอบสนองความn}nnnชั่วโมงn∼ πn---√ชั่วโมงn~πnh_n \sim \sqrt{\pi n} เค้าร่างมีดังนี้ ให้เป็นจำนวนต้นไม้ที่มีความสูงน้อยกว่าหรือเท่ากับ (โดยมีแบบแผนสำหรับ ) และB_ {nh}จำนวนต้นไม้ของโหนดnที่มีความสูงมากกว่าหรือเท่ากับh + 1 (นั่นคือB_ {nh} = A_ {nn} - A_ {nh} ) จากนั้นh_n = S_n / A_ {nn}โดยที่S_nคือผลรวมแน่นอน S_n = \ sum_ {h \ geqslant 1} h (A_ {nh} - A_ {n, h-1}) …

3
ต้นไม้สามารถเคลื่อนที่ได้โดยไม่ต้องทำการวนซ้ำกองซ้อนหรือคิวและมีพอยน์เตอร์เพียงไม่กี่ตัว?
ครึ่งทศวรรษที่ผ่านมาฉันนั่งอยู่ในคลาสโครงสร้างข้อมูลที่อาจารย์ให้เครดิตพิเศษถ้าใครก็ตามสามารถสำรวจต้นไม้โดยไม่ต้องใช้การเรียกซ้ำกองซ้อนคิว ฯลฯ (หรือโครงสร้างข้อมูลอื่นที่คล้ายคลึงกัน) และเพียงไม่กี่ตัวชี้ ฉันมากับสิ่งที่ฉันคิดว่าเป็นคำตอบที่ชัดเจนสำหรับคำถามซึ่งท้ายที่สุดได้รับการยอมรับจากอาจารย์ ฉันนั่งอยู่ในชั้นเรียนคณิตศาสตร์แบบแยกส่วนกับศาสตราจารย์คนอื่นในแผนกเดียวกัน - และเขายืนยันว่ามันเป็นไปไม่ได้ที่จะเข้าไปสำรวจต้นไม้โดยไม่ต้องเรียกซ้ำกองซ้อนคิว ฯลฯ และวิธีการแก้ปัญหาของฉันไม่ถูกต้อง ดังนั้นมันเป็นไปได้หรือเป็นไปไม่ได้? ทำไมหรือทำไมไม่? แก้ไข: เพื่อเพิ่มความกระจ่างบางอย่างฉันใช้สิ่งนี้บนต้นไม้ไบนารีซึ่งมีสามองค์ประกอบ - ข้อมูลที่จัดเก็บที่แต่ละโหนดและตัวชี้ไปยังลูกสองคน โซลูชันของฉันสามารถขยายไปยังต้นไม้ n-ary ด้วยการเปลี่ยนแปลงเพียงเล็กน้อยเท่านั้น ครูโครงสร้างข้อมูลของฉันไม่ได้ จำกัด ข้อ จำกัด ใด ๆ กับการกลายพันธุ์ต้นไม้และแน่นอนฉันค้นพบในภายหลังว่าวิธีแก้ปัญหาของเขาคือใช้พอยน์เตอร์ชี้ไปที่ต้นไม้ในทางของเขา อาจารย์คณิตศาสตร์ที่ไม่ต่อเนื่องของฉันกล่าวว่าการกลายพันธุ์ของต้นไม้หมายความว่ามันไม่ได้เป็นต้นไม้ตามคำนิยามทางคณิตศาสตร์ของต้นไม้อีกต่อไปคำจำกัดความของเขาก็จะห้ามพอยน์เตอร์ชี้ไปยังผู้ปกครอง - ซึ่งจะตรงกับกรณีที่

2
ความถูกต้อง - พิสูจน์ความโลภ - อัลกอริธึมสำหรับจุดสุดยอดขั้นต่ำของต้นไม้
มีอัลกอริทึมโลภสำหรับการค้นหาจุดสุดยอดขั้นต่ำของต้นไม้ซึ่งใช้ DFS traversal สำหรับแต่ละใบไม้ของต้นไม้ให้เลือกพาเรนต์ของมัน (เช่นพาเรนต์อยู่ในฝาครอบจุดต่ำสุด) สำหรับแต่ละโหนดภายใน: หากไม่มีโหนดย่อยใด ๆ ให้เลือกโหนดนี้ ฉันจะพิสูจน์ได้อย่างไรว่ากลยุทธ์โลภนี้ให้คำตอบที่ดีที่สุด? มีจุดยอดที่เล็กกว่าขนาดที่อัลกอริธึมข้างต้นสร้างขึ้นหรือไม่?

2
อัลกอริทึมการติดฉลากเวลาเชิงเส้นสำหรับต้นไม้หรือไม่?
ฉันมีต้นไม้ที่ไม่มีทิศทางซึ่งมีจุดสูงสุดที่ฉันต้องการติดป้าย โหนดใบไม้ควรมีป้ายกำกับหนึ่งรายการ จากนั้นสมมติว่าใบถูกลบออก ในต้นไม้ที่เหลือใบควรจะติดป้ายที่สอง กระบวนการนี้จะดำเนินต่อไปในลักษณะที่ชัดเจนจนกระทั่งจุดยอดทั้งหมดมีป้ายกำกับ เหตุผลที่ฉันทำเช่นนี้คือฉันต้องการเก็บจุดยอดในคิวและผ่านพวกเขา "ทิ้งก่อน" มีวิธีง่าย ๆ ในการทำเวลาO(n+m)O(n+m)O(n+m)นี้หรือไม่? ฉันสามารถแก้ปัญหาด้วยการทำ BFS ในทุกขั้นตอน แต่ในกรณีที่เลวร้ายที่สุดในทุกขั้นตอนที่ฉันไปถึงจุดสุดยอดทุกอันให้เอาใบสองใบออกและเข้าพวกเขา ฉันเชื่อว่านี่ใช้เวลากำลังสอง อีกแนวคิดหนึ่งคือค้นหาใบทั้งหมดก่อนแล้วจึงทำ BFS จากทุก ๆ ใบ นี่ไม่ได้ให้ทางออกที่ต้องการแก่ฉัน ตัวอย่างเช่นลองพิจารณา "กราฟรูปทรงมงกุฎ" ดังในรูปด้านล่าง โซลูชั่นที่ต้องการแสดงขึ้น แต่การเปิดตัว BFS จากแต่ละใบไม้จะทำให้มีการใช้ป้ายกำกับเพียงสองป้ายเท่านั้น อุดมคติแล้วอัลกอริธึมเชิงเส้นเวลาก็จะอธิบายและนำไปปฏิบัติได้ง่าย
12 algorithms  trees 

4
การสำรวจเส้นทางล่วงหน้าของต้นไม้สองต้นสามารถเหมือนกันได้แม้ว่าต้นไม้นั้นจะแตกต่างกันหรือไม่?
คำถามนี้ค่อนข้างอธิบายได้ว่าพวกเขาทำได้ แต่ไม่แสดงตัวอย่างใด ๆ ของการมีต้นไม้สองต้นที่แตกต่างกันซึ่งมีการสำรวจเส้นทางล่วงหน้าที่เหมือนกัน มีการกล่าวถึงด้วยว่าการสำรวจเส้นทางตามลำดับของต้นไม้สองต้นที่แตกต่างกันอาจเหมือนกันแม้ว่าจะมีโครงสร้างที่แตกต่างกัน มีตัวอย่างของสิ่งนี้หรือไม่?

1
โครงสร้างข้อมูลสำหรับแผนที่เป็นระยะ
ให้เป็นจำนวนเต็มและให้แทนเซตของจำนวนเต็มทั้งหมด ลองแสดงว่าช่วงเวลาของจำนวนเต็ม\}nnnZZ\mathbb{Z}[a,b][a,b][a,b]{a,a+1,a+2,…,b}{a,a+1,a+2,…,b}\{a,a+1,a+2,\dots,b\} ฉันกำลังมองหาโครงสร้างข้อมูลที่จะเป็นตัวแทนของแผนที่{Z} ฉันต้องการโครงสร้างข้อมูลเพื่อสนับสนุนการดำเนินการต่อไปนี้:f:[1,n]→Zf:[1,n]→Zf:[1,n] \to \mathbb{Z} get(i)get(i)\text{get}(i)ควรกลับ(i)f(i)f(i)f(i) set([a,b],y)set([a,b],y)\text{set}([a,b],y)ควรปรับปรุงเพื่อให้คือการปรับปรุงไปแผนที่ใหม่ดังกล่าวว่าสำหรับและสำหรับb]ffff(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=⋯=f(b)=yf(a)=f(a+1)=\cdots=f(b)=yffff′f′f'f′(i)=yf′(i)=yf'(i) = yi∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)i∉[a,b]i∉[a,b]i \notin [a,b] stab(i)stab(i)\text{stab}(i)ควรกลับช่วงเวลาที่ใหญ่ที่สุดเช่นนั้นและเป็นค่าคงที่ใน (เช่น )[a,b][a,b][a,b]i∈[a,b]i∈[a,b]i \in [a,b]fff[a,b][a,b][a,b]f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=⋯=f(b)f(a)=f(a+1)=\cdots=f(b) add([a,b],δ)add([a,b],δ)\text{add}([a,b],\delta)ควรอัปเดตเป็นแผนที่ใหม่เช่นนั้นสำหรับและffff′f′f'f′(i)=f(i)+δf′(i)=f(i)+δf'(i) = f(i) + \deltai∈[a,b]i∈[a,b]i \in [a,b]f′(i)=f(i)f′(i)=f(i)f'(i) = f(i)สำหรับi∉[a,b]i∉[a,b]i \notin [a,b] ] ฉันต้องการให้การดำเนินการแต่ละอย่างมีประสิทธิภาพ ฉันจะนับเวลาหรืออย่างมีประสิทธิภาพ แต่เวลาช้าเกินไป มันก็โอเคถ้าเวลาการทำงานถูกตัดจำหน่ายเวลาการทำงาน มีโครงสร้างข้อมูลที่ทำให้การดำเนินการทั้งหมดเหล่านี้ไปพร้อม ๆO(1)O(1)O(1)O(lgn)O(lg⁡n)O(\lg n)O(n)O(n)O(n) (ฉันสังเกตเห็นรูปแบบที่คล้ายกันเกิดขึ้นในการท้าทายการเขียนโปรแกรมหลายอย่างนี่เป็นลักษณะทั่วไปที่เพียงพอสำหรับปัญหาการท้าทายเหล่านั้นทั้งหมด)

1
โอกาสที่รหัสนี้จะถูกยกเลิกเป็นอย่างไร
ฉันเขียนรหัส Python นี้และสงสัยว่าบางครั้งมันก็ไม่ยุติ (สมมติว่าเรามีหน่วยความจำ / เวลาที่ไม่มีที่สิ้นสุดและไม่จำกัดความลึกของการเรียกซ้ำ) คุณคิดว่ามันจะยุติโดยสังหรณ์ใจเนื่องจากในบางจุดคุณจะต้องโชคดีและถ้ามันไม่ยุติคุณมีเวลาไม่ จำกัด ที่จะได้รับโชคดี ในขณะที่ความลึกของการเรียกซ้ำเพิ่มขึ้นคุณจะต้องกลายเป็นผู้โชคดีมากขึ้น import random def random_tree(): if random.random() < 0.5: return 0 return [random_tree() for _ in range(random.randint(1, 5))] หากrandom_treeไม่ยุติเสมอไปทำไมและโอกาสที่จะยุตินั้นมีอะไรบ้าง ฉันพยายามคำนวณโดยใช้ซึ่งในนั้นมันไร้ประโยชน์ที่ยอดเยี่ยมอย่างใดอย่างหนึ่งให้คำตอบ ~ 0.684124หรือ ... 1P= 1 - ( 1 - 0.5 ) ( 1 - ( P+ P2+ P3+ P4+ P5) / …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.