ความแตกต่างขององค์ประกอบในเวลา O (n)?


21

เราทุกคนรู้ว่าแตกต่างองค์ประกอบในรูปแบบการเปรียบเทียบตามไม่สามารถทำได้ในเวลา อย่างไรก็ตามสำหรับ word-RAM เราสามารถทำได้ดีกว่าโอ(nเข้าสู่ระบบn)

แน่นอนถ้าเราสมมติว่ามีฟังก์ชันแฮชที่สมบูรณ์แบบที่สามารถคำนวณได้ในเวลาเชิงเส้นเราจะได้อัลกอริธึมเชิงเส้นเวลาสำหรับความแตกต่างขององค์ประกอบ: เพียงแค่ hashing หมายเลขหนึ่งต่อหนึ่งและส่งคืน 1 หากมีการชนกัน

อย่างไรก็ตามมีสองประเด็น: 1) สิ่งก่อสร้างส่วนใหญ่ของฟังก์ชั่นแฮชที่สมบูรณ์แบบที่ฉันสามารถหาแบบสุ่มที่ใช้แล้วและ 2) ฉันไม่สามารถหาเวลาสนทนาล่วงหน้าได้ทุกที่นั่นคือเวลาที่ต้องตัดสินใจว่าจะใช้ฟังก์ชันแฮชแบบใด ที่จะใช้ขึ้นอยู่กับชุดของตัวเลข

Fredman et al. "การจัดตาราง sparse ด้วยเวลาเข้าถึงกรณีที่เลวร้ายที่สุดO(1) " จะแก้ไขปัญหาแรกได้โดยจัดให้มีฟังก์ชันแฮชที่มีเวลาเข้าถึงในกรณีที่แย่ที่สุด แต่ไม่ได้พูดเกี่ยวกับปัญหาที่สอง .O(1)

สรุปแล้วนี่คือสิ่งที่ฉันต้องการ:

ออกแบบอัลกอริทึมที่กำหนดชุดของตัวเลข (แต่ละหมายเลขมีความยาวบิต ) บน word-RAM ที่มีความยาวคำค้นหาฟังก์ชันแฮชในเวลาที่(n) ฟังก์ชันควรมีคุณสมบัติที่สำหรับ , จำนวนองค์ประกอบของที่แม็พกับนั้นเป็นค่าคงที่และการคำนวณควรใช้O (1)n w w h : S { 1 , , m } O ( n ) m = O ( n ) h j { 1 , , m } S jSnWWชั่วโมง:S{1,...,ม.}O(n)ม.=O(n)ชั่วโมงj{1,...,ม.}SJO ( 1 )ชั่วโมง(ผม)O(1)เวลาใน "เหมาะสม" รูปแบบคำ RAM, คือตัวแบบไม่ควรอนุญาตให้มีฟังก์ชั่น "ที่แปลกใหม่" ในคำที่จะได้รับการประเมินในO(1)เวลา

ฉันยังต้องการทราบว่ามีอัลกอริทึมในการแก้ไขความแตกต่างขององค์ประกอบใน word-RAM ที่ไม่ใช้ฟังก์ชันแฮชทั้งหมดหรือไม่


8
Re: "ฉันต้องการทราบด้วยเช่นกันว่ามีอัลกอริธึมที่จะแก้ปัญหาความแตกต่างขององค์ประกอบใน word-RAM ที่ไม่ได้ใช้ฟังก์ชันแฮชเลย" - ตราบใดที่คุณต้องการแค่และไม่ใช่เชิงเส้นคุณจะต้องเรียงลำดับคำว่า RAM (ดูen.wikipedia.org/wiki/Integer_sorting ) อัลกอริทึมเหล่านี้บางส่วนใช้การแฮช โอ(nเข้าสู่ระบบn)
David Eppstein

มีวิธีแก้ไขปัญหาโดยประมาณหรือไม่
AT

(ฉันคิดว่า) กระบวนการคิดของคุณกำลังข้ามขั้นตอนเดียว: 1. คุณยืนยันว่าความซับซ้อนที่ดีที่สุดในรูปแบบการเปรียบเทียบคือ 2. คุณถามว่าจะปรับปรุงสิ่งนี้ได้อย่างไรในรุ่น RAM 3. คุณ สอบถามวิธีการแก้ปัญหาโดยตรงในเวลาในรุ่น RAM คุณควรศึกษาวิธีแก้ปัญหาในในรุ่น RAM และดูว่าคุณสามารถปรับปรุงได้หรือไม่? Θ(nเข้าสู่ระบบn)O(n)โอ(nเข้าสู่ระบบn)
Jeremy

Radix จัดเรียงช้าเกินไปสำหรับคุณหรือไม่
โทมัสมูลเลอร์

คำตอบ:


8

ความแตกต่างขององค์ประกอบสามารถแก้ไขได้อย่างแน่นอนในรูปแบบ RAM ในเวลาภายในเวลา:O(nเข้าสู่ระบบเข้าสู่ระบบn)โอ(nเข้าสู่ระบบn)

เรียงในเวลาภายในของคุณตัวเลขของบิตโดยใช้ขั้นตอนวิธีการเรียงลำดับการอธิบายโดยฮันใน STOC 2002 ( "ตายตัวเรียงลำดับในเวลาและพื้นที่เชิงเส้น") จากนั้นสแกนในเวลาเชิงเส้นเพื่อหาการชนO(nเข้าสู่ระบบเข้าสู่ระบบn)nWO(nเข้าสู่ระบบเข้าสู่ระบบn)

เท่าที่ฉันรู้นั่นเป็นผลลัพธ์ที่ดีที่สุดที่รู้จักกันมาจนถึงทุกวันนี้


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