คำถามติดแท็ก suffix-array

3
การคำนวณสตริงย่อยทั่วไปที่ยาวที่สุดของสองสตริงโดยใช้อาร์เรย์ต่อท้าย
หลังจากที่ฉันเรียนรู้วิธีสร้างอาร์เรย์ต่อท้ายในความซับซ้อนฉันสนใจที่จะค้นหาแอปพลิเคชันของอาร์เรย์ต่อท้าย หนึ่งในนั้นคือการหาย่อยทั่วไปที่ยาวที่สุดระหว่างสองสายในO ( N )เวลา ฉันพบบนอินเทอร์เน็ตอัลกอริทึมต่อไปนี้:O ( N)O(ยังไม่มีข้อความ)O(N)O ( N)O(ยังไม่มีข้อความ)O(N) รวมทั้งสองสายและBเป็นหนึ่งสายA BAAABBBBABAB คำนวณอาเรย์ต่อท้ายของBABAB คำนวณอาร์เรย์ (คำนำหน้าทั่วไปที่ยาวที่สุด)L CPLคPLCP คำตอบคือค่าที่ใหญ่ที่สุดL CP[ i ]LคP[ผม]LCP[i] ฉันพยายามที่จะใช้มัน แต่เนื่องจากรายละเอียดการใช้งานไม่ได้กล่าวไว้ (เช่นเมื่อทำการเชื่อมโยงสตริงฉันควรใส่อักขระพิเศษระหว่างพวกเขา ( ) หรือไม่) รหัสของฉันล้มเหลวในหลายกรณีทดสอบ มีคนอธิบายเพิ่มเติมเกี่ยวกับอัลกอริทึมนี้เพิ่มเติมหรือไม่คBAคBAcB ขอบคุณล่วงหน้า. หมายเหตุ:ฉันไม่รับประกันความถูกต้องของอัลกอริทึมนี้ ฉันพบมันในบล็อกและฉันไม่แน่ใจว่ามันใช้งานได้ หากคุณคิดว่ามันไม่ถูกต้องโปรดแนะนำอัลกอริทึมอื่น

1
การนับจำนวนผลรวมจากอาร์เรย์ย่อยที่ต่อเนื่องกันของอาร์เรย์
เราได้รับอาร์เรย์กับทั้งหมดa[1…n]a[1…n]a[1 \ldots n]a[i]>0a[i]>0a[i]>0 ตอนนี้เราต้องการค้นหาจำนวนผลรวมที่แตกต่างจาก subarrays ของมัน (ที่ subarray เป็นช่วงต่อเนื่องของอาร์เรย์คือสำหรับ , ผลรวมคือผลรวมของทั้งหมด องค์ประกอบของ subarray) ตัวอย่างเช่นถ้าแล้วคำตอบคือ 4: เราสามารถสร้าง1,2,3,4a[j…k]a[j…k]a[j\ldots k]j,kj,kj,ka=[1,2,1]a=[1,2,1]a=[1,2,1]1,2,3,41,2,3,4 1,2,3,4 ฉันรู้วิธีการนับจำนวนของจำนวนเงินที่แตกต่างกันในเวลาO(n2)O(n2)O(n^2) ยิ่งกว่านั้นฉันได้ตระหนักว่านี่คล้ายกับปัญหาคลาสสิคที่เราต้องการค้นหาจำนวนสตริงย่อยที่แตกต่างกันของสตริง ฉันกำลังคิดถึงความเป็นไปได้ในการสร้างอาเรย์ต่อท้ายและแก้ไขในลักษณะที่คล้ายกัน (ในเวลา ) แต่ฉันไม่สามารถหาวิธีแก้ไขได้ที่นี่ ตัวอย่างเช่นถ้าเราใช้ส่วนต่อท้ายสำหรับเราจะได้รับ 5 กรณีแทนที่จะเป็นสี่ที่ยอมรับได้ เป็นไปได้ที่จะทำเช่นนี้โดยใช้อาร์เรย์ต่อท้ายหรือฉันคิดผิดทิศทาง?O(n)O(n)O(n)a=[1,2,1]a=[1,2,1]a=[1,2,1] นอกจากนี้ยังมีอีกหนึ่งทิศทางที่ฉันคิดอยู่แบ่งและพิชิต เช่นถ้าฉันแบ่งอาร์เรย์ออกเป็นสองส่วนทุกครั้งจนกว่าจะลดลงเป็นองค์ประกอบเดียว องค์ประกอบเดียวสามารถมีหนึ่งผลรวม ทีนี้ถ้าเรารวมสององค์ประกอบเดียวเข้าด้วยกันมันสามารถทำได้สองวิธี: ถ้าทั้งสองช่วงมีองค์ประกอบเดียวกันเราจะได้รับผลรวม 2 อันที่แตกต่างกันหรือถ้าทั้งสองมีองค์ประกอบต่างกัน แต่ฉันไม่สามารถที่จะพูดถึงเรื่องนี้สำหรับการรวมอาร์เรย์ที่มีความยาวมากกว่า 1 มันเป็นไปได้ไหมที่จะรวมอาร์เรย์ขนาดสองม. เข้ากับคำตอบใน ?O(m)O(m)O(m)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.