2017-03-25 15 views
1

questionを参照して、インデックスを取得するためにJava Collections APIを使用した回答が見つかりました。私の質問は、最適な解決策になる、与えられた問題を解決する他の多くの方法があるということですか?アルゴリズムの複雑さ:より大きい配列のサブ配列の開始インデックスを見つける

  1. 利用二つのループがO(n^2)時間がかかります
  2. 使用コレクションAPI
+0

試してみて、ベンチマークしてください。私はコードの最小量を必要とするものがしばしば最良のものであると言いますが。 – UnholySheep

答えて

2
  1. 使用をハッシュ
  2. 使用をソートとマージ
  3. 使用をソートし、バイナリサーチつのループ
  4. 使用
  5. の使用は、ソート、バイナリ検索がO(nlog n)時間
  6. 使用がかかりますO(nlog n)時間をソートおよびマージ
  7. 使用ハッシュは、他のいくつかのオーバーヘッドと追加のスペースでO(k * n)時間がかかります。
  8. 使用コレクションAPIはnmであるリニアO(n + m)時間複雑にKnuth–Morris–Pratt algorithmを使用することによってあなたは、上記の方法と一緒に最適な方法でそれを行うことができます

フードの下にその使用ネイティブアルゴリズムとしてO(n^2)時間がかかります2つの配列の長さ

KMPアルゴリズムは基本的に、文字列に作用するパターンマッチングアルゴリズム(ヘイスタックの針の開始位置を見つける)です。しかし、整数配列に簡単に使用できます。

これらの実装すべてについてベンチマークテストを行い、要件に合うように効率的なものを選択できます。

+0

ありがとうございます。しかし、それは与えられたアルゴリズムが文字列のためであるようです。整数配列にはいいですか? – deadbug

+1

はい、文字配列(文字列) 'str1 [i] == str2 [j]'を比較する代わりに、整数配列 'arr1 [i] == arr2 [j]'を比較します。文字列を比較すると、1バイトが比較され、整数の場合は4バイトが比較されます。これとは何も変わりません。 –

関連する問題