questionを参照して、インデックスを取得するためにJava Collections APIを使用した回答が見つかりました。私の質問は、最適な解決策になる、与えられた問題を解決する他の多くの方法があるということですか?アルゴリズムの複雑さ:より大きい配列のサブ配列の開始インデックスを見つける
- 利用二つのループが
O(n^2)
時間がかかります - 使用コレクションAPI
questionを参照して、インデックスを取得するためにJava Collections APIを使用した回答が見つかりました。私の質問は、最適な解決策になる、与えられた問題を解決する他の多くの方法があるということですか?アルゴリズムの複雑さ:より大きい配列のサブ配列の開始インデックスを見つける
O(n^2)
時間がかかりますO(nlog n)
時間O(nlog n)
時間をソートおよびマージO(k * n)
時間がかかります。n
とm
であるリニアO(n + m)
時間複雑にKnuth–Morris–Pratt algorithmを使用することによってあなたは、上記の方法と一緒に最適な方法でそれを行うことができますフードの下にその使用ネイティブアルゴリズムとしてO(n^2)
時間がかかります2つの配列の長さ
KMPアルゴリズムは基本的に、文字列に作用するパターンマッチングアルゴリズム(ヘイスタックの針の開始位置を見つける)です。しかし、整数配列に簡単に使用できます。
これらの実装すべてについてベンチマークテストを行い、要件に合うように効率的なものを選択できます。
ありがとうございます。しかし、それは与えられたアルゴリズムが文字列のためであるようです。整数配列にはいいですか? – deadbug
はい、文字配列(文字列) 'str1 [i] == str2 [j]'を比較する代わりに、整数配列 'arr1 [i] == arr2 [j]'を比較します。文字列を比較すると、1バイトが比較され、整数の場合は4バイトが比較されます。これとは何も変わりません。 –
試してみて、ベンチマークしてください。私はコードの最小量を必要とするものがしばしば最良のものであると言いますが。 – UnholySheep