List<T>.IndexOf(List<T>)
の実装を探しています。私はList<<T>.IndexOf(T)
しか.NETクラスライブラリに見つかりませんでした。IList <T> String.IndexOfのバージョン(単一のオブジェクトだけでなくサブストリングを見つける)
私はList longList
とList possibleSubList
を持っています。私はpossibleSubList
がlongList
の中にサブストリングとして見つかるかどうか知りたいのですが、その場合はインデックスをlongList
にします。
これは基本的にSystem.String.IndexOf
と同じセマンティクスです。誰がこれを何と呼ぶべきか、それとも良い実装があるのかを知っていますか?
擬似コード例:
{1, 2, 3, 9, 8, 7}.IndexOf({3, 9, 8}) = 2
{1, 2, 3, 9, 8, 7}.IndexOf({1, 2, 3, 9, 8, 7}) = 0
{1, 2, 3, 9, 8, 7}.IndexOf({2, 9}) = -1 (not found)
明確化:私はすでにこのの直接の実装(ループのための2つのネストされた)を持っていますが、私のリストはかなり長く、これはパフォーマンスの影響を受けやすい地域です。私は〜O(m * n)よりも効率的な実装を見つけることを望んでいます。私は単語「サブ文字列」の使用は少し誤解を招くようだったと思います(擬似コード)
findsubstring(list<T> s, list<T> m){
for(int i=0; i<s.length;++i)
for(int j=0; j<m.length;++j)
if(s[i] != s[j])
break;
if(j==m.length-1)
return i;
return -1;
}
機能コンテキストと期待される結果の予想される使用例を挙げてください。 –
Boyer Mooreアルゴリズムでは良い仕事のようですが、 'char'ではなく' T'に基づいています。私は複雑さを思い出すことはできませんが、すでに提示されている選択肢(ブルートフォース方式のように見える)よりもはるかに優れています。 – leppie
ええ。素朴な実装はかなり簡単ですが、私はより効率的なアルゴリズムの既存の実装を見つけることを望んでいました。 – Seth