Misalkan kita diberi koleksi string, . Saya ingin tahu apakah salah satu dari string tersebut adalah substring dari string lain dalam koleksi. Dengan kata lain, saya ingin algoritma untuk tugas berikut:
Input:
Output: sehingga adalah substring dari S_j dan i \ ne j , atau None jika tidak ada i, j ada
Apakah ada algoritma yang efisien untuk ini?
Jika kita mengganti "substring" dengan "awalan", ada algoritma yang efisien (mengurutkan string, lalu melakukan pemindaian linier untuk membandingkan string yang berdekatan; pengurutan akan memastikan bahwa substring berbatasan). Tetapi tampaknya lebih menantang untuk menguji apakah string adalah substring dari string lain. Algoritma naif adalah untuk mengulangi semua pasangan , tetapi ini membutuhkan tes substring . Apakah ada algoritma yang lebih efisien?
Saya kira kita bisa menyebut ini "all-pair substring testing", atau sesuatu seperti itu.
Tujuan utama saya adalah memangkas koleksi sehingga tidak ada string yang merupakan substring dari yang lain, dengan menghapus masing-masing yang merupakan substring dari sesuatu yang lain dalam koleksi.