suffix array
Haskellから、googleのような検索エンジンにアクセスするにはどうしたらいいんだろうと思って調べていたら、
suffix array
というものに遭遇。
よくわかんないけど、とりあえずこんなもんかなと思って書いてみた
import Data.List maketouple :: Int -> [String]->[(String , Int)] maketouple n [s] = [(s , n)] maketouple n (s:str) = (s,n):maketouple (n+1) str suffix_index :: String -> [(String , Int)] suffix_index = maketouple 0.init.tails suffix_sort :: String -> [Int] suffix_sort = map snd.sort.suffix_index main = getLine >>=print.suffix_sort
ちゃんと、ネットにあるような答えが返って来ました。
これをどう利用するのか、まだちょっと頭がまわんない....
もうちょっと明るい場所でPC使わないと目が悪くなりそうです。
短くしてみた
import Data.List maketouple :: Int -> [String]->[(String , Int)] maketouple n [s] = [(s , n)] maketouple n (s:str) = (s,n):maketouple (n+1) str suffix_index :: String -> [Int] suffix_index = map snd.sort.maketouple 0.init.tails main = getLine >>=print.suffix_index
alistの、第1要素ではなく第2要素でソートしてくれるような関数があると、
zip [0..] . init.tails
とできるので、綺麗にポイントフリースタイルで一つの関数にまとめられるんですけどね。
ちょっと見つからない