มีคิวลำดับความสำคัญที่มีการแยก


46

มีโครงสร้างข้อมูลจำนวนมากที่ใช้อินเตอร์เฟสลำดับความสำคัญ - คิว:

  • Insert: ใส่องค์ประกอบเข้าไปในโครงสร้าง
  • Get-Min: คืนองค์ประกอบที่เล็กที่สุดในโครงสร้าง
  • Extract-Min: ลบองค์ประกอบที่เล็กที่สุดในโครงสร้าง

โครงสร้างข้อมูลทั่วไปที่ใช้อินเทอร์เฟซนี้คือ (นาที) ฮี

โดยปกติแล้วเวลาที่ใช้งาน (ตัดจำหน่าย) ของการดำเนินการเหล่านี้คือ:

  • แทรก: (บางครั้ง )O ( บันทึกn )O(1)O(logn)
  • Get-Min:O(1)
  • สารสกัด - ขั้นต่ำ:O(logn)

Fibonacci กองประสบความสำเร็จในครั้งที่ทำงานเหล่านี้ตัวอย่างเช่น ตอนนี้คำถามของฉันคือต่อไปนี้:

มีโครงสร้างข้อมูลที่มีเวลาทำงาน (ตัดจำหน่าย) ต่อไปนี้หรือไม่?

  • แทรก: O(logn)
  • Get-Min: O(1)
  • สารสกัดจากขั้นต่ำ: O(1)

หากเราสามารถสร้างโครงสร้างดังกล่าวในเวลาO(n)กำหนดอินพุตที่เรียงลำดับจากนั้นเราสามารถเช่นหาจุดตัดของเส้นบนอินพุตที่เรียงลำดับล่วงหน้าด้วยo(nlogn)ทางแยกเร็วกว่าถ้าเราใช้ลำดับความสำคัญ 'ปกติ'


ฉันคิดว่าใช้ BST ที่สมดุลซึ่งจะไม่ทำให้เกิดความสมดุลเมื่อใช้ Extract-Min สามารถทำงานได้ หรืออาจจะเป็นรายการข้าม
svick

@svick: รายการข้ามถูกสุ่มซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา หากคุณสามารถทำมันด้วย BST ได้นั้นยอดเยี่ยม แต่ฉันคิดว่าคุณจะต้องทำบางอย่างให้สมดุล
Alex สิบ Brink

ในหมายเหตุด้าน: นี่เป็นคำถามที่เพาะและฉันรู้คำตอบ แต่มันดีที่เห็นว่ามันไม่ได้แก้ไขได้อย่างง่ายดาย หากใครรู้คำตอบอย่าลังเลที่จะให้มัน :)
Alex ten Brink

หากคุณยอมรับเวลาอัปเดตที่ถูกตัดจำหน่ายคุณสามารถเก็บโครงสร้างฮีปมาตรฐานไว้และทำการแก้ไขเล็กน้อยเพื่อการวิเคราะห์ของคุณ ดูคำตอบของฉันด้านล่าง
โจ

คำตอบ:


27

ความคิดของเราคือการใช้เกลียว ต้นไม้แผ่ออก นอกเหนือจากบทความ Wikipedia เราจะโยงต้นไม้เพื่อให้ทุกโหนดมีตัวชี้nextไปยังตัวตายตัวแทนในการส่งผ่านตามลำดับ เรายังถือตัวชี้startไปยังองค์ประกอบที่เล็กที่สุดในต้นไม้

มันเป็นเรื่องง่ายที่จะเห็นว่าการแยกองค์ประกอบที่เล็กที่สุดเป็นไปได้ใน (กรณีที่เลวร้าย) เวลา : เพียงแค่ทำตามตัวชี้เอาขั้นต่ำและการเปลี่ยนแปลงตัวชี้ไปขั้นต่ำ ขั้นต่ำไม่สามารถมีลูกที่ยังเหลืออยู่ได้ ถ้ามันมีลูกที่เหมาะสมเราจะวางไว้ในตำแหน่งที่ต่ำที่สุดในต้นไม้ เราไม่ได้ดำเนินการต้นไม้ splay ดำเนินการโดยปกติจะทำ ผลลัพธ์คือแผนผังการค้นหาที่ยังคงมีความสมดุลพอสมควร: เนื่องจากเราลบโหนดที่ด้านข้างซ้ายเท่านั้นเรารู้ว่าเมื่อจำนวนโหนด (ในทรีย่อยได้รับผลกระทบ) ลดลงเหลือประมาณครึ่งหนึ่งของจำนวนเดิมเนื่องจากการลบ ) ความสูงของต้นไม้ลดลงหนึ่งอันO(1)startnext

การแทรกสามารถทำได้ในเวลาตัดจำหน่ายการดำเนินการซิกแซก (และสิ่งที่ไม่ได้) ที่นี่จะทำให้ต้นไม้สมดุลO(logn)

นี่เป็นภาพร่างคร่าวๆที่ดีที่สุด เครดิตไปที่ F. Weinberg ซึ่งทำให้ฉันงงงวยกับคำถามและที่ปรึกษาของเรา M. Nebel ที่พูดถึงต้นไม้สเปรย์เกี่ยวกับตัวแปรต้นไม้ชนิดเดียวที่เราไม่เคยลอง


2
ยังไม่ชัดเจนสำหรับฉันเกี่ยวกับวิธีการวิเคราะห์ค่าตัดจำหน่ายให้ใช้งานได้หากคุณไม่ได้แยกจาก extractMin คุณสามารถให้คำใบ้?
jbapple

เรายังไม่ได้ลงรายละเอียดเลย แนวคิดคือชุดของการดำเนินการแยกต่ำสุดไม่ทำให้เกิดความสมดุลของต้นไม้ดังนั้นจึงไม่จำเป็นต้องมีการไถและการวิเคราะห์ปกติควรใช้กับการแทรก
ราฟาเอล

9
ระวัง! ต้นไม้ที่เล่นไม่จำเป็นต้องสมดุล โหนดที่ไม่ได้รับการเข้าถึงเป็นเวลานานอาจจะลึกมากในต้นไม้ เพื่อให้การวิเคราะห์ผ่านไปคุณต้องโต้แย้งในแง่ของฟังก์ชั่นที่มีศักยภาพแบบเดียวกันกับที่ใช้ในการวิเคราะห์สเปรย์
JeffE

20
  • แทรก: O(logn)
  • Get-Min: O(1)
  • สารสกัดจากขั้นต่ำ: O(1)

เวลาตัดจำหน่าย

การใช้งานที่เรียบง่ายของคิวลำดับความสำคัญ (เช่น BST ใด ๆ ที่สมดุลหรือไบนารีนาที - ฮีปมาตรฐาน) สามารถบรรลุเวลาทำงาน (ตัดจำหน่าย) เหล่านี้โดยเพียงแค่เรียกเก็บค่าใช้จ่ายของ Extract-Min เพื่อแทรกและบำรุงรักษาตัวชี้ไปยังองค์ประกอบขั้นต่ำ ตัวอย่างเช่นคุณอาจมีฟังก์ชั่นที่มีศักยภาพที่จะเป็น n จากนั้นการแทรกองค์ประกอบใหม่เพิ่มความเป็นไปได้โดยO ( log n )และดังนั้นค่าใช้จ่ายในการแทรกค่าตัดจำหน่ายยังคงเป็นO ( log n )แต่ Extract-Min () จะลดความเป็นไปได้โดยΩ ( log n )และค่าตัดจำหน่าย เป็นเพียงO (cnlognO(logn)O(logn)Ω(logn) )O(1)

กรณีที่เลวร้ายที่สุด

คุณสามารถใช้โครงสร้างข้อมูลที่มีอยู่ในวรรณกรรม: แผนผังการค้นหาด้วยนิ้วและเพียงแค่รักษาตัวชี้ไปยังองค์ประกอบขั้นต่ำ ดูแบบสำรวจนี้เพื่อดูภาพรวมและเอกสารฉบับปี 1988 โดย Levcopoulos และ Overmars สำหรับรุ่นที่พัฒนาได้ซึ่งตรงกับความต้องการของคุณ


1
ช่างลับๆ คุณพูดถูกฉันคิดว่าฉันควรจะเรียกร้องสิ่งที่แข็งแกร่งกว่าเพื่อแยกสิ่งนี้ออก Nice idea :)
Alex ten Brink

@AlextenBrink คุณสามารถเรียกร้องการลบแย่ที่สุดได้ (ซึ่งน่าจะเป็นสิ่งที่บางคำตอบอื่น ๆ กำลังจะเกิดขึ้น) ฉันเพิ่มวรรคลงในคำตอบของฉันเพื่อระบุกรณีนั้น O(1)
โจ

14

ต้น 2-4 ต้นมีการตัดจำหน่ายที่สถานที่ที่ทราบ กล่าวคือถ้าคุณมีตัวชี้ไปยังสถานที่บางแห่งในทรีคุณสามารถลบหรือเพิ่มองค์ประกอบที่มีในเวลาO ( 1 )ตัดจำหน่ายO(1)O(1)

คุณสามารถเก็บตัวชี้ไว้ที่องค์ประกอบขั้นต่ำและโหนดรูทในทรี 2-4 ส่วนแทรกควรผ่านรูทโหนด การอัพเดตตัวชี้เป็นระดับต่ำสุดเป็นเรื่องเล็กน้อยหลังจาก deleteMin และ deleteMins เป็นเวลา (ตัดจำหน่าย)O(1)

หมายเหตุด้านที่น่าสนใจ: ต้นไม้สีแดงดำเป็นเพียงวิธีการดูที่ 2-4 ต้น นักออกแบบของผู้ใช้งานไลบรารีที่คาดหวัง C ++ 98 เพื่อจัดหาคอนเทนเนอร์ที่ใช้ต้นไม้สีแดงดำและมาตรฐานระบุว่าการแทรกและลบควรเป็นเวลาตัดจำหน่าย ณ สถานที่ที่รู้จัก (ซึ่งเรียกว่า "iterators" ) อย่างไรก็ตามนี่เป็นเรื่องยากกว่าต้นไม้สีแดงดำมากกว่า 2-4 ต้นเนื่องจากต้องใช้โหนดที่ทำเครื่องหมายอย่างเกียจคร้านซึ่งจำเป็นต้องเปลี่ยนสี ตามความรู้ของฉันไม่มีการใช้งานของไลบรารีมาตรฐาน C ++ 98 ตรงตามข้อกำหนดเฉพาะนั้นO(1)


8

ตามคำขอนี่คือโครงสร้างที่ฉันพบหลังจากฉันกำหนดคำถาม:

แนวคิดพื้นฐานคือการใช้ต้นไม้ Scapegoat แบบเธรด พร้อมกับตัวชี้ไปยังค่าต่ำสุด (และสำหรับการวัดที่ดี, ค่าสูงสุดเช่นกัน) ทางเลือกที่ง่ายกว่าในการทำเกลียวคือการรักษาตัวชี้และผู้สืบทอดในทุกโหนด (ซึ่งเทียบเท่าได้ง่ายกว่า แต่มีค่าใช้จ่ายมากกว่า) ฉันจะเรียกมันว่ากองแพะรับบาปเพียงเพื่อให้ชื่อ

โครงสร้างพื้นฐานนี้ช่วยให้คุณดำเนินการเหล่านี้:

  • ค้นหา: รับคีย์กลับชี้ไปยังโหนดที่สอดคล้องกันในเวลาO(logn)
  • แทรก: รับคีย์แทรกที่สำคัญในโครงสร้างที่กลับตัวชี้ไปยังโหนดว่าในเวลาO(logn)
  • บรรพบุรุษ / ทายาท: กำหนดตัวชี้กลับทายาทหรือบรรพบุรุษในเวลาO(1)
  • Get-Min / Max: ส่งกลับตัวชี้ไปที่ต่ำสุดหรือสูงสุด

ในการวิเคราะห์ต้นไม้ Scapegoat ค่าใช้จ่ายสมดุลของการลบจะถูกวิเคราะห์เป็นแต่การวิเคราะห์ให้ค่าใช้จ่ายสมดุลของO ( 1 ) (ซึ่งจะถูกละเว้นในกระดาษตามที่พวกเขานับO ( log n) )เวลาที่ใช้ในการค้นหาโหนดที่จะถูกลบ) ดังนั้นถ้าเรามีตัวชี้ไปยังโหนดเราสามารถลบมันในเวลาคงที่ (คุณสามารถทำได้ในเธรดการค้นหาแบบไบนารีเธรดในO ( 1 )เวลา) และรวมกับO ( 1 )ค่าใช้จ่ายในการสร้างสมดุลโอ (O(logn)O(1)O(logn)O(1)O(1)เวลาลบ:O(1)

  • ลบ: กำหนดตัวชี้ลบโหนดในเวลาO(1)

รวมสิ่งนี้:

  • สารสกัดจาก-Min / Max: ลบโหนดต่ำสุด / สูงสุดเวลาO(1)

คุณสามารถทำอะไรได้มากขึ้นด้วยพอยน์เตอร์: ตัวอย่างเช่นมันไม่ยากที่จะรักษาตัวชี้ไปยังค่ามัธยฐานหรือสถิติการสั่งซื้ออื่น ๆ ดังนั้นคุณสามารถรักษาพอยน์เตอร์ดังกล่าวให้คงที่หากคุณต้องการ

บางสิ่งอื่น ๆ :

  • สร้าง: รับคีย์ในเรียงลำดับสร้างกองแพะรับบาปในO ( n )เวลาnO(n)
  • Balance: ทำให้ต้นไม้มีความสมดุลดังนั้นจึงสร้างแผนภูมิการค้นหาแบบไบนารีที่มีความสมดุลอย่างสมบูรณ์แบบ (ลดค่าใช้จ่ายในการค้นหา) ในเวลา (คุณสามารถทำสิ่งนี้ให้คงที่ได้เร็วกว่ากระดาษที่เสนอโดยวิธีการ ชี้)O(n)

และสุดท้ายฉันก็ค่อนข้างมั่นใจว่าคุณสามารถรองรับการปฏิบัติการเหล่านี้ได้ แต่ฉันต้องคิดถึงสิ่งเหล่านี้ให้มากขึ้นก่อนที่จะรู้สิ่งนี้อย่างแน่นอน:

  • แทรก-New-Min / Max: รับสำคัญที่มีขนาดเล็ก / ขนาดใหญ่กว่าปุ่มใด ๆ แล้วในโครงสร้างแทรกที่สำคัญในโครงสร้างที่กลับตัวชี้ไปยังโหนดว่าในเวลาO(1)

ความเข้าใจที่สำคัญคือต้นไม้ต้นแพะรับประกันว่าการลบโหนดใด ๆโดยไม่ต้องปรับสมดุลจะไม่ส่งผลต่อประสิทธิภาพของการดำเนินการอื่น ๆ ในระยะยาวแม้ว่าคุณจะลบโหนดจำนวนมากก็ตาม
Raphael

ฉันรู้วิธีการลบสองวิธีในต้นแพะรับบาป วิธีหนึ่งในการทำมิเรอร์และเป็นเวลาที่ตัดจำหน่ายวิธีอื่นที่ฉันเคยได้ยินว่าใช้การสร้างใหม่ทั่วโลกและเป็นค่าตัดจำหน่ายO ( 1 )แต่ฉันไม่รู้ว่าจะคงเธรดไว้ได้อย่างไรในกรณีนี้ ลองนึกภาพการใส่กุญแจใหม่เข้าไปในส่วนของทรีซึ่งเป็นกุญแจที่ถูกลบทั้งหมดที่ยังไม่ได้ถูกลบออก คุณจะพบว่าบรรพบุรุษของคีย์ที่จะถูกแทรกในเวลาO ( lg n ) ได้อย่างไร O(lgn)O(1)O(lgn)
jbapple

2
@jbapple: มีสองรูปแบบเกี่ยวกับวิธีการลบในเวลาสำหรับต้นไม้ Scapegoat หนึ่งคือการปล่อยให้โหนดทำเครื่องหมายว่าถูกลบและลบโหนดที่ถูกลบเหล่านี้ทั้งหมดด้วยการสร้างใหม่ทั่วโลกและอื่น ๆ คือการลบโหนดจริงๆ อันแรกนั้นง่ายต่อการวิเคราะห์ (และยังช่วยให้คุณมีข้อ จำกัด ในเรื่องที่สองซึ่งเป็นสาเหตุที่มักจะอธิบาย) แต่สิ่งที่สองคือสิ่งที่ฉันต้องการ: คุณสามารถลบเวลาO ( 1 )ในต้นไม้ค้นหาไบนารีวานิลลา หากคุณสามารถทำแบบสอบถาม / ตัวตายตัวแทนในเวลาO ( 1 )และทำยอดคงเหลือในO ( 1 )เวลาที่ตัดจำหน่ายจะทำให้คุณมีเวลาที่เหลืออยู่O(1)O(1)O(1)O(1)
Alex สิบ Brink

อ่าฉันเข้าใจแล้ว
jbapple

2

ซอฟต์ฮีพคือการแก้ไขคิวทวินามอย่างละเอียด โครงสร้างข้อมูลเป็นตัวอย่างกับข้อผิดพลาดพารามิเตอร์εสนับสนุนการแทรกลบรวมและ findmin ตัดจำหน่ายความซับซ้อนของการดำเนินการแต่ละคือO ( 1 )ยกเว้นแทรกซึ่งจะนำเข้าสู่ระบบ( 1 / ε )เวลา ความแปลกใหม่ของ heap ที่อ่อนนุ่มกำลังเต้นอยู่บนลอการิทึมที่ผูกไว้กับความซับซ้อนของ heap ในรูปแบบการเปรียบเทียบ เพื่อทำลายสิ่งกีดขวางทางทฤษฎีสารสนเทศเอนโทรปีของโครงสร้างข้อมูลจะถูกลดลงโดยการเพิ่มค่าของบางคีย์โดยไม่ตั้งใจ สิ่งนี้เรียกว่าการทำให้เสียหายϵO(1)log(1/ϵ)กุญแจ. โครงสร้างข้อมูลนั้นใช้ตัวชี้อย่างสมบูรณ์ (ไม่มีอาร์เรย์หรือสมมติฐานที่เป็นตัวเลข) และเหมาะสมที่สุดสำหรับค่าใด ๆ ของในรูปแบบการเปรียบเทียบϵ

แอพพลิเคชั่นของซอฟต์ฮีพนั้นรวมการคำนวณทรีสแปนนิ่งขั้นต่ำสำหรับกราฟรักษาเปอร์เซ็นต์และสถิติการสั่งเวลาเชิงเส้น นอกจากนี้ยังสามารถใช้สำหรับการคำนวณโดยประมาณเช่นการเรียงลำดับโดยประมาณที่ระดับขององค์ประกอบไม่แตกต่างกันมากกว่าจากอันดับที่แท้จริงϵn

สำหรับต้นฉบับที่ชัดเจนและกระดาษเขียนอย่างดูเบอร์นาร์ดชเซลล์, ซอฟท์กอง: การจัดลำดับความสำคัญโดยประมาณคิวที่มีข้อผิดพลาดที่เหมาะสมอัตราวารสาร ACM 47 (6), PP 1012-1027, 2000. ทางเลือกสำหรับการดำเนินงานและการวิเคราะห์ที่อ้างว่าเป็นที่เรียบง่ายและใช้งานง่ายมากขึ้นจาก SODA'09 ดูKaplan H. & U. ซวิค, การดำเนินเรียบง่ายและการวิเคราะห์ของกองนุ่ม Chazelle ของ 2009


แม้ว่า datastructure ที่น่าสนใจอย่างมาก heap แบบซอฟต์ไม่แน่นอน: findmin อาจส่งคืนค่าที่ไม่ใช่ค่าต่ำสุด แต่เป็นเพียงค่าต่ำสุดโดยประมาณ ขอขอบคุณสำหรับการเชื่อมโยงต่อไป :)
อเล็กซ์บริงค์สิบ

1
@AlextenBrink: จุดของโครงสร้างข้อมูล (เช่นอัลกอริธึมที่น่าจะเป็นจำนวนมาก) คือคุณสามารถใช้โครงสร้างข้อมูลโดยประมาณเพื่อรับคำตอบที่แน่นอน อันที่จริงลักษณะโดยประมาณของ heap ที่อ่อนนุ่มนั้นไม่ได้ป้องกันไม่ให้มันถูกใช้ในอัลกอริธึมเชิงเส้นเวลาที่รู้จักกันเพียงอย่างเดียวสำหรับต้นไม้ที่ทอดน้อยที่สุด
Jérémie

2

ในที่สุดก็ได้รับความซับซ้อนที่คุณกำลังค้นหาและสิ่งที่ดีที่สุดฉันพบมันในวรรณกรรม:

ความซับซ้อนกรณีที่เลวร้ายที่สุด

O(1)

O(1)

O(1)

O(log n)

การอ้างอิง

[3]O(1)O(log n)O(n)

Brodal, Gerth Stølting 'คิวลำดับความสำคัญที่สามารถเข้าใจได้อย่างรวดเร็ว' ในการประชุมเชิงปฏิบัติการนานาชาติครั้งที่ 4 เรื่องอัลกอริทึมและโครงสร้างข้อมูล, 282–290 WADS '95 ลอนดอน, อังกฤษ, สหราชอาณาจักร: Springer-Verlag, 1995

[3]: Dietz, Paul F และ Rajeev Raman 'แผนผังการค้นหาเวลาของการอัพเดทอย่างต่อเนื่อง' ตัวอักษรการประมวลผลข้อมูล 52 หมายเลข 3 (1994): 147 - 154

แม้ว่าจะใช้รูปแบบRAM ของการคำนวณ :

โครงสร้างข้อมูลของเราใช้โมเดลเครื่องเข้าถึงโดยสุ่ม (RAM) พร้อมการวัดต้นทุนต่อหน่วยและขนาดคำลอการิทึม

เมื่อเร็ว ๆ นี้เป็นตัวชี้เครื่อง[1]รุ่นของการแก้ปัญหาการคำนวณที่ได้รับ

[1]: Brodal, Gerth Stølting, George Lagogiannis, Christos Makris, Athanasios Tsakalidis และ Kostas Tsichlas 'ต้นไม้ค้นหานิ้วที่ดีที่สุดในเครื่องชี้' เจคอมพิวเตอร์ Syst วิทย์ หมายเลข 67 2 (กันยายน 2546): 381–418


2

ใกล้ถึงปัญหานี้โดยการบำรุงรักษาโครงสร้างข้อมูลสองรายการ: Array และ Binary Tree

Ω(lognloglogn)Ω(logn)

O(logn)O(logn)

nullO(logn)

O(1)O(1)

O(logn)O(1)delete_at(idx)


1 Patrascu, Mihai และ Erik D. Demaine “ ขอบเขตล่างลอการิทึมในโมเดล Cell-Probe” SIAM J. Comput 35, ไม่ 4 (เมษายน 2549): 932–963 ดอย: 10.1137 / S0097539705447256


1
O(logn)

"ด้ายต้นไม้ค้นหาแบบทวิภาคในอาร์เรย์" หมายความว่าอะไร?
jbapple

@AT: ฉันแบ่งปันความเชื่อมั่นของ jbapple
กราฟิลส์

Ω(k)kO(1)

การอัปเดตของคุณซึ่งคุณอธิบายวิธีใช้การหมุนเวียนในเวลาคงที่จะไม่ทำงานในอาร์เรย์ คำตอบนี้ยังไม่ถูกต้อง กระดาษ Tarjan ที่คุณอ้างอิงนั้นเกี่ยวกับต้นไม้ที่จัดเก็บด้วยโหนดและตัวชี้
jbapple

-2

O(1)O(log log n)

ดูบทความปี 2550: ความเท่าเทียมกันระหว่างลำดับความสำคัญและการเรียงลำดับโดย Mikkel Thorup

O(n log log n)


แม้ว่าเอกสารที่คุณเชื่อมโยงนั้นน่าสนใจ แต่ลำดับความสำคัญที่พวกเขานำเสนอนั้นไม่มีการลบเวลาคงที่ (ถ้าฉันอ่านบทคัดย่ออย่างถูกต้อง) และด้วยเหตุนี้จึงไม่ใช่สิ่งที่ฉันขอ
Alex สิบ Brink

-2

การวิเคราะห์

o(n log log n)

o(log log n)

O(1)

O(n)

O(1)

O(1)

การดำเนินงาน

  1. O(1)
  2. O(6)O(1)
  3. k±
    ((k>nsize1)(k<n0)((k<ni)(k>ni+1)))
    o(log log n)

[1]: Andersson, Arne และ Christer Mattsson 'การแก้ไขแบบไดนามิกในเวลา O (บันทึกการทำงาน n) เวลา' ใน Automata ภาษาและการเขียนโปรแกรมแก้ไขโดย Andrzej Lingas, Rolf Karlsson และ Svante Carlsson, 700: 15–27 หมายเหตุการบรรยายในวิทยาการคอมพิวเตอร์ สปริงเกอร์เบอร์ลิน / ไฮเดลเบิร์ก, 1993 http://dx.doi.org/10.1007/3-540-56939-1_58


2
เวลาแทรกเป็นวิธีปิดเครื่องหมาย
ราฟาเอล

nsize1n0nini+1

การอ่านบทคัดย่อของบทความที่คุณเชื่อมโยงดูเหมือนว่าขอบเขตเหล่านี้คาดว่าจะมีขอบเขตสำหรับการกระจายข้อมูลเฉพาะซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา: ฉันต้องการขอบเขตที่ฉันพูดถึงในสิ่งที่ป้อนเข้า
อเล็กซ์สิบบริงค์

O(log n)

@AT ลอการิทึมการค้นหาแบบไบนารีต้องการการเข้าถึงแบบสุ่ม รายการที่อยู่ภายใต้การดำเนินการคืออะไร? คุณควรโต้แย้งขอบเขตที่อ้างสิทธิ์ของคุณจริงๆ นอกจากนี้ "ตำแหน่งในรายการ" นั้นคลุมเครือ - ตำแหน่งใดและสัญลักษณ์ใดที่อ้างถึง? ไม่ใช่ทุกคนที่สามารถเข้าถึงกระดาษที่คุณเชื่อมโยงได้ โปรดลองทำคำตอบของคุณ (เพิ่มเติม) ในตัวเองและอย่างน้อยก็สรุปข้อเท็จจริง ณ จุดนี้ฉันไม่เชื่อว่าคำตอบของคุณถูกต้อง
Juho
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.