【问题标题】:Random search algorithm using recursion使用递归的随机搜索算法
【发布时间】:2017-08-03 12:41:02
【问题描述】:

所以我对算法很陌生,并且从未使用递归编程,所以如果我错过了一些愚蠢的东西,我提前道歉。

我正在尝试制作一种搜索算法,我相信它的工作方式类似于二进制搜索。

让我们调用搜索 x 的元素(就像 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.

我遇到的问题是我的随机数只能在范围内搜索。如果我像在我的代码中那样去rand.nextInt(upperbound),它只会继续向左搜索。我需要能够向左或向右搜索它。有没有更好的随机数方法呢?有谁知道我怎么可能实现这个算法?下面的代码是一天半的工作,老实说,我现在对自己很失望。

另外我知道如果我的数组根本不包含 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));
}

【问题讨论】:

  • 是否可以让递归参数的数组更小以达到预期的效果? return searchRan(Array, x, select + 1, up);

标签: java algorithm recursion


【解决方案1】:

尝试像这样生成你的探测索引:

int select = low + rand.nextInt(up - low + 1);

low &gt; up时搜索失败;这应该是您在搜索例程中检查的第一件事。

【讨论】:

  • 你先生是神
【解决方案2】:

由于您的数组已经排序,您需要让中间元素始终搜索左数组或右数组。

int middle = (start + end) / 2;

请参考以下链接。

How to use recursion in creating a binary search algorithm

【讨论】:

  • 我的实现需要随机搜索数组。
【解决方案3】:

为什么要重新发明轮子,既然数组已经排序,只需使用二进制搜索算法。

第 1 步 - 从列表中间开始搜索数据。

第 2 步 - 如果匹配,则返回项目的索引,然后退出。

第 3 步 - 如果不匹配,则探测位置。

第 4 步 - 使用探测公式划分列表并找到新的中间。

Step 5 - 如果数据大于中间,则在更高的子列表中搜索。

Step 6 - 如果数据小于中间,则在较低的子列表中搜索。

第 7 步 - 重复直到匹配。

【讨论】:

  • 因为我的算法分析和设计讲师告诉我
【解决方案4】:

您的代码有问题:

  • 变量向上的值为负值或为零。 它应该始终大于零。
  • 尝试使其始终大于零。
  • 有时低>向上。你需要修复它。

那你就没事了。

【讨论】:

  • 那不是问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2020-09-06
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多