0
タイトルでは、linearSearchとbinarySearchを組み合わせた検索アルゴリズムを作成したいとしています。配列の要素が20よりも少ない場合、私はlinearSearchを使用したい、またはバイナリ検索を使用したいと思います。リニア検索とバイナリ検索を組み合わせた検索アルゴリズム
- 配列をソートする必要があります。
- 配列はComparable型の要素です。
-Theアルゴリズムは、要素が、それ以外の場合は-1
私のコードを返しますが、少しこだわってイムべきで発見されたインデックスを返す必要があります..私は正しい軌道に乗っていますか?あなたの線形検索
if(Array[i] == find){
temp = i;
}
else{
temp = -1;
}
については
public class SearchAlgorithm<T extends Comparable<T>> {
public int linearSearch(T[] Array, T find){
int temp = 0;
for(int i = 0; i < Array.length; i++){
if(Array[i] == find){
temp = i;
}
else{
temp = -1;
}
}
return temp;
}
public int binarySearch(T[] Array, T find){
int lowIdx = 0;
int highIdx = Array.length-1;
int middleIdx = 0;
while(lowIdx <= highIdx){
middleIdx = (highIdx + lowIdx)/2;
int comp = find.compareTo(Array[middleIdx]);
if(comp < 0)
lowIdx = middleIdx + 1;
else if(comp > 0)
highIdx = middleIdx -1;
else{
lowIdx = highIdx+1;
return middleIdx;
}
}
return -1;
}
public void combinedSearch(T[] Arr, T find){
long startTime = System.currentTimeMillis();
if(Arr.length < 20){
linearSearch(Arr,find);
}
else{
binarySearch(Arr,find);
}
long endTime = System.currentTimeMillis();
System.out.println("combinedSearch took: "+(endTime-startTime)+ "ms");
}
public static void main(String[] args){
int[] a = {1,2,3,4,5};
binarySearch(a,4);
}
}
あなたのタイミング方法が重要なものを返すには、少なくとも100万の要素が必要です。 –
このような検索アルゴリズムの時間の複雑さはどのくらいですか?配列の要素の量に依存していないのですか?もし20以上の要素があれば、LinearSearchとO(log N)を選択するので、20以下の要素はそのO(N)ですか? – JohnBanana
番号。漸近表記は、無制限のNのみ(Nは任意に大きい)に対するものです。これが限定されているため、「Under 20 elements」は無関係です。 –