รับสาย n เป็นหนึ่งในนั้นสตริงย่อยของอื่นหรือไม่
สมมติว่าเราจะได้รับคอลเลกชันของสตริงs_1ฉันต้องการทราบว่าสตริงเหล่านี้เป็นสตริงย่อยของสตริงอื่น ๆ ในคอลเลกชันหรือไม่ กล่าวอีกนัยหนึ่งฉันต้องการอัลกอริทึมสำหรับงานต่อไปนี้:nnnS1,…,SnS1,…,SnS_1,\dots,S_n อินพุต:S1,…,SnS1,…,SnS_1,\dots,S_n เอาท์พุท:ดังกล่าวว่าเป็นย่อยของและหรือไม่หากไม่เช่นที่มีอยู่i,ji,ji,jSiSiS_iSjSjS_ji≠ji≠ji\ne ji,ji,ji,j มีอัลกอริทึมที่มีประสิทธิภาพสำหรับสิ่งนี้หรือไม่? หากเราแทนที่ "substring" ด้วย "คำนำหน้า" จะมีอัลกอริทึมที่มีประสิทธิภาพ (เรียงลำดับสตริงจากนั้นทำการสแกนเชิงเส้นเพื่อเปรียบเทียบสตริงที่อยู่ติดกันการเรียงลำดับจะทำให้แน่ใจว่ามีสตริงย่อยติดกัน) แต่ดูเหมือนจะมีความท้าทายมากขึ้นในการทดสอบว่าสตริงใด ๆ เป็นสตริงย่อยของสตริงอื่น ๆ อัลกอริทึมที่ไร้เดียงสาคือการทำซ้ำในทุกคู่ของแต่ต้องใช้การทดสอบสตริงย่อยมีอัลกอริทึมที่มีประสิทธิภาพมากขึ้นหรือไม่?i,ji,ji,jΘ(n2)Θ(n2)\Theta(n^2) ฉันเดาว่าเราเรียกสิ่งนี้ว่า "การทดสอบสตริงย่อยทุกคู่" หรืออะไรทำนองนั้น เป้าหมายสูงสุดของฉันคือการตัดคอลเลคชั่นดังนั้นจึงไม่มีสตริงย่อยใด ๆ โดยลบแต่ละอันที่เป็นซับสตริงของอย่างอื่นในคอลเลกชัน