คำถามติดแท็ก priority-queues

9
มีคิวลำดับความสำคัญที่มีการแยก
มีโครงสร้างข้อมูลจำนวนมากที่ใช้อินเตอร์เฟสลำดับความสำคัญ - คิว: Insert: ใส่องค์ประกอบเข้าไปในโครงสร้าง Get-Min: คืนองค์ประกอบที่เล็กที่สุดในโครงสร้าง Extract-Min: ลบองค์ประกอบที่เล็กที่สุดในโครงสร้าง โครงสร้างข้อมูลทั่วไปที่ใช้อินเทอร์เฟซนี้คือ (นาที) ฮีป โดยปกติแล้วเวลาที่ใช้งาน (ตัดจำหน่าย) ของการดำเนินการเหล่านี้คือ: แทรก: (บางครั้ง )O ( บันทึกn )O(1)O(1)\mathcal{O}(1)O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) สารสกัด - ขั้นต่ำ:O(logn)O(log⁡n)\mathcal{O}(\log n) Fibonacci กองประสบความสำเร็จในครั้งที่ทำงานเหล่านี้ตัวอย่างเช่น ตอนนี้คำถามของฉันคือต่อไปนี้: มีโครงสร้างข้อมูลที่มีเวลาทำงาน (ตัดจำหน่าย) ต่อไปนี้หรือไม่? แทรก: O(logn)O(log⁡n)\mathcal{O}(\log n) Get-Min: O ( 1 )O(1)\mathcal{O}(1) สารสกัดจากขั้นต่ำ: O ( 1 )O(1)\mathcal{O}(1) หากเราสามารถสร้างโครงสร้างดังกล่าวในเวลาO (n)O(n)\mathcal{O}(n)กำหนดอินพุตที่เรียงลำดับจากนั้นเราสามารถเช่นหาจุดตัดของเส้นบนอินพุตที่เรียงลำดับล่วงหน้าด้วยo ( nเข้าสู่ระบบn)o(nlog⁡n)o\left(\frac{n}{\log …

3
เพิ่มคีย์และคีย์ลดในไบนารีมินฮีป
ในการสนทนาจำนวนมากของไบนารีฮีปปกติจะมีการแสดงคีย์ลดลงเพียงคีย์ว่าเป็นการดำเนินการที่ได้รับการสนับสนุนสำหรับมินิฮีป ยกตัวอย่างเช่น CLR บทที่ 6.1 และหน้าวิกิพีเดียนี้ เหตุใดจึงไม่เพิ่มรหัสปกติสำหรับ min-heap ฉันคิดว่าเป็นไปได้ที่จะทำเช่นนั้นใน O (ความสูง) โดยการสลับองค์ประกอบที่เพิ่มขึ้น (x) ซ้ำ ๆ โดยใช้ลูกน้อยที่สุดจนกว่าจะไม่มีลูกใดของมันใหญ่กว่า x เช่น IncreaseKey(int pos, int newValue) { heap[pos] = newValue; while(left(pos) < heap.Length) { int smallest = left(pos); if(heap[right(pos)] < heap[left(pos)]) smallest = right(pos); if(heap[pos] < heap[smallest]) { swap(smallest, pos); pos= smallest; } else …

6
คิวลำดับความสำคัญสำหรับลำดับความสำคัญที่สั่งซื้อบางส่วนด้วย infima
ฉันมีวัตถุบางอย่างที่มีความสำคัญว่าเป็นประเภทสารประกอบและเป็นเพียงการสั่งซื้อบางส่วน ฉันจำเป็นต้องเลือกวัตถุตามลำดับความสำคัญนี้ (เช่นให้ผลผลิตน้อยที่สุดในแต่ละครั้ง) แต่แทนที่จะทำตามคำสั่งโดยพลการฉันจะชอบถ้าคิวนั้นมีความมั่นคงในแง่ที่ว่าถ้ามีองค์ประกอบขั้นต่ำมากกว่าหนึ่งชิ้นก็ควรคืนค่าที่เก่าที่สุดก่อน มีโครงสร้างข้อมูลฮีปใดบ้างที่สามารถใช้กับการสั่งซื้อบางส่วนได้ หรือการแก้ไขคิวลำดับความสำคัญปกติเพื่อทำงานกับมัน? ตัวเลือกทั่วไปสำหรับอัลกอริทึมที่ฉันต้องการคือไบนารีแบบง่ายหรือ 4-ary heap แต่ไม่สามารถใช้กับการสั่งซื้อบางส่วนได้ การสนับสนุนค่าลำดับความสำคัญ: ≼ ขข≼ ⋚ ̸ ข≼≼\preccurlyeqa≼ba≼ba \preccurlyeq bb≼ab≼ab \preccurlyeq aa⋚̸ba⋚̸ba \not\lesseqgtr b การค้นหาinfima (glb) และ suprema (lub) เป็นสูงสุดปีดังกล่าวว่าY \ preccurlyeq x_i คำนวณ infimum ของnค่าใช้เวลาO (n)เวลา มีค่าน้อยที่สุด (และสูงสุด) ของทุกชุดy y ≼ x i n O ( n )inf(xi)inf(xi)\inf(x_i)yyyy≼xiy≼xiy \preccurlyeq x_innnO(n)O(n)O(n) สามารถกำหนดส่วนขยายเชิงเส้นสำหรับการสั่งซื้อบางส่วนได้ …

2
ฮีป - ให้อัลกอริทึมเวลา
อาจเป็นไปได้ว่าคำถามนี้ถูกถามมาก่อน มันมาจาก CLRS (2nd Ed) ปัญหา 6.5-8 - ให้อัลกอริทึมเวลาเพื่อรวมรายการที่เรียงลำดับkไว้ในรายการที่เรียงลำดับหนึ่งรายการโดยที่nคือจำนวนองค์ประกอบทั้งหมดในรายการอินพุตทั้งหมด (คำแนะนำ: ใช้ min-heap สำหรับการรวมk -way)O(nlgk)O(nlg⁡k)O(n \lg k)kkknnnkkk เนื่องจากมีรายการที่เรียงลำดับและค่าnทั้งหมดให้เราสมมติว่าแต่ละรายการมีnkkknnnหมายเลข kยิ่งไปกว่านั้นแต่ละรายการจะเรียงตามลำดับจากน้อยไปหามากและผลลัพธ์จะถูกเก็บไว้ในลำดับจากน้อยไปหามากnknk\frac{n}{k} โค้ดหลอกของฉันดูเหมือนว่านี้ - list[k] ; k sorted lists heap[k] ; an auxiliary array to hold the min-heap result[n] ; array to store the sorted list for i := 1 to k ; O(k) …

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 

1
คิวลำดับความสำคัญที่มีทั้งการลดคีย์และการเพิ่มคีย์
Fibonnaci กองสนับสนุนการดำเนินการดังต่อไปนี้: insert(key, data) : เพิ่มองค์ประกอบใหม่ให้กับโครงสร้างข้อมูล find-min() : ส่งกลับตัวชี้ไปยังองค์ประกอบด้วยปุ่มต่ำสุด delete-min() : ลบองค์ประกอบที่มีคีย์ขั้นต่ำ delete(node) : ลบองค์ประกอบที่ชี้ไปตาม node decrease-key(node) : ลดคีย์ขององค์ประกอบที่ชี้ไป node การดำเนินการที่ไม่ลบทั้งหมดคือเวลา (ตัดจำหน่าย) และการดำเนินการลบเป็นเวลาตัดจำหน่ายO ( 1 )O(1)O(1)O ( บันทึกn )O(เข้าสู่ระบบ⁡n)O(\log n) มีการใช้งานของคิวลำดับความสำคัญซึ่งสนับสนุนincrease-key(node)ในเวลา (ตัดจำหน่าย) หรือไม่O ( 1 )O(1)O(1)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.