คำถามติดแท็ก search-algorithms

อัลกอริทึมสำหรับการค้นหาองค์ประกอบในโครงสร้างข้อมูลที่ระบุ (โดยทั่วไปในโครงสร้างต้นไม้)

2
การค้นหาองค์ประกอบที่เล็กที่สุดของ k'th จากลำดับที่กำหนดไว้เฉพาะกับหน่วยความจำ O (k) เวลา O (n)
สมมติว่าเราอ่านลำดับของตัวเลขnnnทีละตัว วิธีค้นหาองค์ประกอบที่เล็กที่สุดของkkkเพียงแค่ใช้หน่วยความจำเซลล์O(k)O(k)O(k)และในเวลาเชิงเส้น ( O(n)O(n)O(n) ) ผมคิดว่าเราควรบันทึกแรกkkkแง่ของลำดับและเมื่อได้รับk+1k+1k+1 'ระยะ TH ลบคำซึ่งเราแน่ใจว่ามันไม่สามารถที่kkk ' องค์ประกอบที่เล็ก TH แล้วบันทึกk+1k+1k+1 'ระยะ TH ดังนั้นเราควรมีตัวบ่งชี้ที่แสดงคำที่ใช้ไม่ได้ในแต่ละขั้นตอนและตัวบ่งชี้นี้ควรได้รับการอัปเดตในแต่ละขั้นตอนอย่างรวดเร็ว ฉันเริ่มต้นด้วย"สูงสุด"; แต่มันไม่สามารถอัพเดทได้อย่างรวดเร็ว หมายความว่าหากเราพิจารณาค่าสูงสุดแล้วในการลบครั้งแรกเราพลาดค่าสูงสุดและเราควรค้นหาค่าสูงสุดในO(k)O(k)O(k)และสาเหตุ(n−k)×O(k)(n−k)×O(k)(n-k)\times O(k)เวลาที่ไม่เป็นเชิงเส้น บางทีเราควรบันทึกลำดับของkkkลำดับแรกอย่างชาญฉลาดยิ่งขึ้น ฉันจะแก้ปัญหานี้ได้อย่างไร

1
อัลกอริทึมแบบขนานสำหรับการค้นหาสูงสุดใน
เรานำเสนอในชั้นเรียนพร้อมอัลกอริทึมสำหรับการค้นหาสูงสุดในอาเรย์แบบขนานในความซับซ้อนของเวลากับคอมพิวเตอร์n 2O(1)O(1)O(1)n2n2n^2 อัลกอริทึมคือ: รับอาร์เรย์ A ของความยาว n: สร้างอาร์เรย์แฟล็ก B ที่มีความยาว n และกำหนดค่าเริ่มต้นด้วยเลขศูนย์ด้วยคอมพิวเตอร์nnn เปรียบเทียบทุกองค์ประกอบ 2 และเขียน 1 ใน B ที่ดัชนีขั้นต่ำกับคอมพิวเตอร์n2n2n^2 ค้นหาดัชนีด้วย 0 ใน A ด้วยคอมพิวเตอร์nnn อาจารย์บรรยายให้พวกเราเห็นว่าทำได้ด้วยคอมพิวเตอร์และมีการบันทึกnซับซ้อนเวลาnlognnlog⁡n\frac{n}{\log n}lognlog⁡n\log n หลังจากคิดมากฉันไม่สามารถหาวิธีทำได้ ความคิดใด ๆ

1
กำกับการค้นหายูเนี่ยน
พิจารณากราฟกำกับGGGที่หนึ่งสามารถเพิ่มขอบแบบไดนามิกและทำแบบสอบถามเฉพาะบางอย่าง ตัวอย่าง: ฟอเรสต์ disjoint-set พิจารณาชุดคำถามต่อไปนี้: arrow(u, v) equiv(u, v) find(u) คนแรกที่จะเพิ่มลูกศรจากกราฟที่สองตัดสินใจถ้ามึง↔ *วีคนสุดท้ายพบตัวแทนที่ยอมรับของชั้นสมมูลของ↔ * , เช่นR ( U )ดังกล่าวว่ายู↔ *วีหมายถึงR ( V ) = R ( U )u→vu→vu→vu↔∗vu↔∗vu↔^*v↔∗↔∗↔^*r(u)r(u)r(u)u↔∗vu↔∗vu↔^*vr(v)=r(u)r(v)=r(u)r(v)=r(u) มีความเป็นอัลกอริทึมที่รู้จักกันดีโดยใช้โครงสร้างข้อมูลป่าเคล็ดชุดดำเนินการคำสั่งเหล่านี้ในกึ่งคงตัดจำหน่ายซับซ้อนคือ(n)) หมายเหตุว่าในกรณีนี้จะดำเนินการใช้O(α(n))O(α(n))O(α(n))equivfind ตัวแปรที่ซับซ้อนมากขึ้น ตอนนี้ฉันสนใจปัญหาที่ซับซ้อนยิ่งขึ้นซึ่งทิศทางสำคัญ: arrow(u, v) confl(u, v) find(u) คนแรกที่จะเพิ่มลูกศรวินาทีตัดสินใจถ้ามีโหนดสามารถเข้าถึงได้จากทั้งและคือ←วี อันสุดท้ายควรส่งคืนออบเจคต์เช่นที่หมายถึงโดยที่ควรคำนวณได้ง่าย (เพื่อที่จะพูดคำนวณ) เป้าหมายคือการหาโครงสร้างข้อมูลที่ดีเพื่อให้การดำเนินการเหล่านี้รวดเร็วu→vu→vu→vwwwuuuvvvu→∗←∗vu→∗←∗vu→^*←^*vr(u)r(u)r(u)u→∗←∗vu→∗←∗vu→^*←^*vr(u)∙r(v)r(u)∙r(v)r(u) \bullet r(v)∙∙\bulletconfl รอบ กราฟสามารถมีรอบ ฉันไม่ทราบว่ามีวิธีในการคำนวณส่วนประกอบที่เชื่อมต่ออย่างมีประสิทธิภาพและเพิ่มขึ้นหรือไม่เพื่อพิจารณา DAG สำหรับปัญหาหลักเท่านั้น แน่นอนฉันจะขอบคุณวิธีแก้ปัญหาสำหรับ DAG ด้วย …

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
การกำหนดหมายเลขเฉพาะในเวลาและพื้นที่ (กรณีที่แย่ที่สุด)
\newcommand\ldotd{\mathinner{..}}ระบุว่าA[1..n]A[1..n]A[1\ldotd n]เป็นจำนวนเต็มเช่น0≤A[k]≤m0≤A[k]≤m0\le A[k]\le mสำหรับ1≤k≤n1≤k≤n1\le k\le nทั้งหมดและการเกิดขึ้นของแต่ละรายการ หมายเลขยกเว้นหมายเลขเฉพาะในA[1..n]A[1..n]A[1\ldotd n]เป็นเลขคี่ พยายามค้นหาหมายเลขที่มีเหตุการณ์เป็นเลขคู่ มีอัลกอริทึมΘ(nlogn)Θ(nlog⁡n)\Theta(n\log n) : เราจัดเรียงA[1..n]A[1..n]A[1\ldotd n]เป็นB[1..n]B[1..n]B[1\ldotd n]และแบ่งB[1..n]B[1..n]B[1\ldotd n]ออกเป็นหลาย ๆ ชิ้นซึ่งค่าขององค์ประกอบคือ เหมือนกันดังนั้นเราสามารถนับการเกิดขึ้นของแต่ละองค์ประกอบ ฉันต้องการค้นหาอัลกอริธึมที่แย่ที่สุด - O(n)O(n)O(n) -time-and- O(n)O(n)O(n) -space สมมติว่าm=Ω(n1+ϵ)m=Ω(n1+ϵ)m=\Omega(n^{1+\epsilon})และϵ>0ϵ>0\epsilon>0ดังนั้นการเรียงลำดับของ Radix จึงไม่เป็นที่ยอมรับ \DeclareMathOperator{\xor}{xor} ไบนารี Bitwise การดำเนินงานเป็นที่ยอมรับเช่นA[1]xorA[2]A[1]xor⁡A[2]A[1]\xor A[2][2]

1
เหตุใดจึงกล่าวได้ว่าการค้นหาแบบกว้างแรกแสดงในเวลา
มันมักจะระบุไว้ (เช่นในวิกิพีเดีย ) ที่เวลาทำงานของการค้นหาในแนวกว้าง (BFS) ในกราฟเป็น|) อย่างไรก็ตามกราฟที่เชื่อมต่อใด ๆ มีและแม้ในกราฟที่ไม่ได้เชื่อมต่อ BFS จะไม่มองจุดยอดนอกส่วนประกอบที่มีจุดยอดเริ่มต้น องค์ประกอบนั้นมีอย่างมาก ขอบดังนั้นมันจึงมีจุดยอดมากที่สุดและนั่นเป็นสิ่งเดียวที่อัลกอริธึมจะเข้าชมG = ( V, E)G=(V,E)G=(V,E)O ( | V| + | E| )O(|V|+|E|)O(|V|+|E|)| V| ≤ | E| +1|V|≤|E|+1|V|\leq |E|+1| E||E||E|| E| +1|E|+1|E|+1 ซึ่งหมายความว่าดังนั้นทำไมเราไม่พูดว่าเวลาทำงานเป็นเพียง ?| V| + | E| ≤2 | E| +1|V|+|E|≤2|E|+1|V|+|E|\leq 2|E|+1O ( | E| )O(|E|)O(|E|) นี้ขึ้นมาในความคิดเห็นในคำถามเกี่ยวกับเวลาทำงานของอัลกอริทึม Disjkstra …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.