我想寫執行以下功能:查找字符串出現的所有的行號在文本文件中
給定一個文本文件,我想找到一個特定字符串的所有出現在這個文件;那麼,對於每一次發生,它被發現的行應該被添加到列表中。我們假設每行只包含至多一個事件。文本文件可能變得非常大,這意味着一個簡單的for-loop循環遍歷每行文件將會太慢。
例如,假設我們有內容的文件:
- ABCDEFG
- HJKLMNO
- GFEDCBA
- PQRSTUV
如果我要搜索 「A」 ,函數會在第1行和第3行上找到它,從而將1和3添加到列表中(然後返回列表)。
我正在考慮二元搜索,但它似乎要求將一個列表進行排序,並將元素分開 - 我正在尋找相同的值。
那麼,是否有其他搜索算法可以基於我的功能,其性能與二分查找大致相同?
謝謝!
所有的行都是相同的長度嗎? – Ryan
如果找到的字符串可以在任何行上的任何位置,那麼在訪問該特定行之前,您希望如何驗證它不在任何給定行上?換句話說,你有沒有想過比O(n)更好(for循環) –
這個文件有多大?而且,正如@Rune指出的那樣,除非您預處理文件並維護每個單詞的索引,否則無法比O(n)做得更好。 –