アルゴリズムにはかなり新しく、再帰をプログラムしたことがないので、何か愚かなものがない場合は事前にお詫びします。再帰を使用したランダム検索アルゴリズム
私はバイナリ検索のようなものと同様に動作する検索アルゴリズムを作ろうとしています。
は(xはスポットをマークのように)私が午前問題は、境界内にので、私の乱数のみを検索し、それを作っている
So I search a random index in a sorted array
If element < x
lowerbound = index + 1 //to create a sub array
If element > x
upperbound = index - 1 //to create a sub array
Repeat process until find x in array.
Xを探し要素イムを呼び出すことができます。もし私がrand.nextInt(upperbound)
に行くと、私は自分のコードにあるように、それはちょうど左に検索し続けます。私はそれを左または右に検索する必要があります。これにはより良い乱数法がありますか?どのように私はこのアルゴリズムを実装する可能性がどのような考えを誰も持っていますか?下のコードは1日半ですが、この時点で私は正直言ってかなり失望しています。
また、私の配列にはxが全く含まれていないが、私は最初にソートされた基本的な検索メカニズムを取得したいと考えていることも知っています。
どのようなヘルプでも大丈夫です。
private static int counter = 0;
public static int searchRan(int Array[], int x, int low, int up)
{
counter++;
Random rand = new Random();
int select = rand.nextInt(up);
System.out.println(select);
if(Array[select] == x)
{
System.out.printf("Found %d after %d recursion", x, counter);
return select;
}
else if(Array[select] < x)
{
return searchRan(Array, x, select + 1, up);
}
else if(Array[select] > x)
{
return searchRan(Array, x, low, select - 1);
}
else
{
return 666;
}
}
public static void main(String[] args){
int sortedArray[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int lowerbound = 0;
int upperbound = sortedArray.length - 1;
int target = 0;
System.out.println(searchRan(sortedArray, 0, lowerbound, upperbound));
}
希望の結果を得るために再帰的なパラメータの配列を小さくすることはできますか?戻り値searchRan(Array、x、select + 1、up); –