การทำงานของอัลกอริทึมของ Ukkonen ขึ้นอยู่กับขนาดตัวอักษรอย่างไร


19

ฉันกังวลกับคำถามเกี่ยวกับเวลาที่ใช้ในการทำงานแบบไม่แสดงอาการของอัลกอริทึมของ Ukkonenซึ่งอาจเป็นอัลกอริทึมที่ได้รับความนิยมมากที่สุดสำหรับการสร้างต้นไม้ต่อท้ายในเวลาเชิงเส้น (?)

นี่คือการอ้างอิงจากหนังสือ "อัลกอริทึมในสตริงต้นไม้และลำดับ" โดย Dan Gusfield (ส่วน 6.5.1):

"... อัลกอริธึมAho-Corasick, Weiner, Ukkonenและ McCreight นั้นต้องการพื้นที่หรือเวลาต้องถูกแทนที่ด้วยค่าต่ำสุดของและ "Θ(m|Σ|)O(m)O(mlogm)O(mlog|Σ|)

[คือความยาวสตริงและคือขนาดของตัวอักษร]mΣ

ฉันไม่เข้าใจว่าทำไมถึงเป็นจริง

  • พื้นที่:ดีในกรณีที่เราเป็นตัวแทนของสาขาออกจากโหนดใช้อาร์เรย์ขนาดแล้วแน่นอนเราจบลงด้วยการใช้พื้นที่ อย่างไรก็ตามเท่าที่ฉันเห็นมันเป็นไปได้ที่จะจัดเก็บกิ่งไม้โดยใช้ตารางแฮช (เช่นพจนานุกรมใน Python) จากนั้นเราจะมีเฉพาะตัวชี้เก็บไว้ในตารางแฮชทั้งหมด (เนื่องจากมีขอบในต้นไม้) ในขณะที่ยังคงสามารถเข้าถึงโหนดลูกในเวลาเร็วที่สุด เช่นเดียวกับเมื่อใช้อาร์เรย์Θ(|Σ|)Θ(m|Σ|)Θ(m)Θ(m)O(1)
  • เวลา : ดังกล่าวข้างต้นโดยใช้ตารางแฮชช่วยให้เราสามารถเข้าถึงสาขาขาออกของโหนดใด ๆ ในเวลา ตั้งแต่ขั้นตอนวิธี Ukkonen ต้องใช้การดำเนินงาน (รวมถึงการเข้าถึงโหนดเด็ก) เวลาการทำงานโดยรวมแล้วจะเป็นยัง(เมตร)O(1)O(m)O(m)

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


3
ฉันไม่คิดว่าจะมีข้อพิสูจน์ถึงผลกระทบใด ๆ ที่ทำให้ไม่สามารถใช้เวลา / พื้นที่อิสระตามขนาดตัวอักษรได้ ฉันเชื่อว่า Gusfield ออกแถลงการณ์เพราะไม่มีวิธีการใดที่สามารถกำจัดเวลาได้อย่างสมบูรณ์ ในการสร้างหนึ่งคุณจะต้องอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับฟังก์ชันแฮชในรายละเอียดเพิ่มเติม เวลาที่เลวร้ายที่สุดที่เป็นกรณี O (1) จริงสำหรับการค้นหาแฮชต้องใช้แฮชที่สมบูรณ์แบบ ฉันยังไม่ชัดเจนว่าจะทำอย่างไรในระหว่างอัลกอริทึม (เนื่องจากรายการแฮชไม่คงที่ ณ จุดนั้น)
jogojapan

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

1
บริบทที่มีประโยชน์: อธิบายอัลกอริทึมของ
Ukkonen

คำตอบ:


2

ตามที่ @jogojapan กล่าวถึงในความคิดเห็นการมีโดยทั่วไปจะมีการตัดจำหน่ายเฉพาะดังนั้นคุณจะได้รับการ จำกัด ขอบเขตสำหรับอัลกอริทึมเท่านั้น อย่างไรก็ตามฉันคิดว่าคุณไม่ได้รับสิ่งเหล่านี้: เพื่อให้ได้รับการตัดค่าใช้จ่ายการแฮชตารางแฮชจะต้องมีขนาดดังนั้นคุณยังมีพื้นที่ว่าง ( และความต้องการเวลาเดียวกันสำหรับการเริ่มต้น)O(1)O(1)Ω(Σ)Θ(mΣ)

ยิ่งไปกว่านั้นในทางปฏิบัติเวลาในการตั้งค่าตารางแฮชเหล่านี้จะสูงกว่าเวลาในการตั้งค่าอาร์เรย์

คุณอาจรู้สึกดีขึ้นเมื่อใช้ตารางแฮชส่วนกลางที่ทำดัชนีด้วย (โหนด, ตัวอักษร) - คู่ แต่อย่างน้อยอาร์กิวเมนต์ "ตัดจำหน่ายเท่านั้น" จะยังคงอยู่

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