7
อัลกอริทึมทรีต่อท้ายของ Ukkonen เป็นภาษาอังกฤษธรรมดา
ตอนนี้ฉันรู้สึกหนานิดหน่อย ฉันใช้เวลาหลายวันพยายามคลุมศีรษะของฉันอย่างเต็มที่เกี่ยวกับการสร้างต้นไม้ต่อท้าย แต่เนื่องจากฉันไม่มีภูมิหลังทางคณิตศาสตร์คำอธิบายมากมายทำให้ฉันหลงเพราะพวกเขาเริ่มใช้สัญลักษณ์ทางคณิตศาสตร์มากเกินไป คำอธิบายที่ดีที่สุดที่ฉันพบคือการค้นหาสตริงอย่างรวดเร็วด้วยคำต่อท้ายต้นไม้แต่เขาคัดสรรจุดต่าง ๆ และบางแง่มุมของอัลกอริทึมยังไม่ชัดเจน คำอธิบายทีละขั้นตอนของอัลกอริทึมที่นี่ใน Stack Overflow จะมีค่าสำหรับคนอื่น ๆ นอกเหนือจากฉันฉันแน่ใจ สำหรับการอ้างอิงนี่เป็นบทความของ Ukkonen เกี่ยวกับอัลกอริทึม: http://www.cs.helsinki.fi/u/ukkonen/SuffixT1withFigs.pdf ความเข้าใจพื้นฐานของฉันจนถึงตอนนี้: ฉันต้องวนซ้ำคำนำหน้า P แต่ละตัวของสตริง T ที่กำหนด ฉันต้องวนซ้ำคำต่อท้ายแต่ละ S ในคำนำหน้า P และเพิ่มเข้าไปในต้นไม้ ในการเพิ่มคำต่อท้าย S ลงบนต้นไม้ฉันจำเป็นต้องวนซ้ำอักขระแต่ละตัวใน S ด้วยการวนซ้ำซึ่งประกอบด้วยการเดินลงสาขาที่มีอยู่ซึ่งเริ่มต้นด้วยชุดอักขระ C เดียวกันใน S และอาจแบ่งขอบเป็นโหนดสืบทอดเมื่อฉัน ถึงตัวละครที่แตกต่างกันในคำต่อท้ายหรือถ้าไม่มีขอบที่ตรงกันที่จะเดินลง เมื่อไม่พบการจับคู่ขอบเพื่อเดินลงสำหรับ C ขอบใบใหม่จะถูกสร้างขึ้นสำหรับ C อัลกอริธึมพื้นฐานดูเหมือนจะเป็น O (n 2 ) ดังที่อธิบายไว้ในคำอธิบายส่วนใหญ่เนื่องจากเราจำเป็นต้องก้าวผ่านคำนำหน้าทั้งหมดจากนั้นเราต้องก้าวผ่านคำต่อท้ายสำหรับคำนำหน้าแต่ละคำ อัลกอริธึมของ Ukkonen นั้นมีความพิเศษเพราะเทคนิคตัวชี้ส่วนต่อท้ายที่เขาใช้แม้ว่าฉันคิดว่านั่นเป็นสิ่งที่ฉันมีปัญหาในการทำความเข้าใจ …