选择等级算法

城市

下面是选择等级算法的实现,该算法用于查找数组中第K个最小元素之前的元素。有时此程序运行良好,但有时由于堆栈溢出错误(代码段下方的错误)而失败

public static int rand(int left, int right){
    return left+(int)(Math.random()*(double)(right-left));
}

public static int rank(int[] array, int left, int right, int rank){
    int pivot = rand(left, right);  
    int leftend = partition(array, left, right, array[pivot]);

    int size = leftend - left +1;
    if(size == rank+1){
        for(int i=0; i<=leftend; i++)
        System.out.print(array[i]+" ,");
        return 0;
    }else if(size > rank)
        return rank(array, left, leftend, rank);
    else return rank(array, leftend+1, right, rank - size);

}   

public static int partition(int[] array, int left, int right, int pivot){
    while(true){
        while(left <= right && array[left] <= pivot)
            left++;

        while(right >= left && array[right] > pivot)
        right--;

        if(left > right)
        return left-1;

        int temp = array[left];
        array[left] = array[right];
        array[right] = temp;
    }

 }

错误:

Exception in thread "main" java.lang.StackOverflowError
    at java.util.Random.nextDouble(Random.java:409)
    at java.lang.Math.random(Math.java:712)
    at mod.rand(mod.java:12)
    at mod.rank(mod.java:16)
    at mod.rank(mod.java:25)

我认为也许rand()导致了此问题,但我不确定。我也不知道如何解决它。

ZePoLiTaT

我假设您想让您的rand方法返回一个介于left(包括)和right(包括)之间的数字。但是,Math.random()方法返回一个介于0.0(含)和1.0(不含)之间的数字。因此,在要评估的子数组的大小为2的情况下(即:left = 4和right = 5),该rand函数将只能返回4。尝试在rand函数中更改此行,以确保它可以包含上限:

return left+(int)(Math.random()*(double)(right-left));

为了

return left+(int)(Math.random()*(double)(right-left + 1));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在遗传算法中执行基于等级的选择?

来自分类Dev

摘要文本等级算法

来自分类Dev

等级和经验算法

来自分类Dev

用等级替换子选择

来自分类Dev

R,根据某列的等级选择行

来自分类Dev

R中的清洁等级选择调查数据

来自分类Dev

R,根据某列的等级选择行

来自分类Dev

基于非支配等级的排序遗传算法精英问题

来自分类Dev

基于非支配等级的排序遗传算法精英问题

来自分类Dev

A *算法开放列表选择

来自分类Dev

C ++“选择”算法

来自分类Dev

矩形选择算法

来自分类Dev

了解选择算法

来自分类Dev

选择/排序算法(背包)

来自分类Dev

选择排序算法交换

来自分类Dev

Corda 硬币选择算法

来自分类Dev

间隔调度算法或活动选择算法

来自分类Dev

:具有vs:匹配-选择器等级4

来自分类Dev

如何从多个数组中使用php选择重复等级

来自分类Dev

SQLite-选择列的不同组合的等级

来自分类Dev

Java-方法选择算法

来自分类Dev

选择算法运行时

来自分类Dev

算法:从列表中选择点

来自分类Dev

涉及分区和选择的算法

来自分类Dev

选择数据挖掘算法的属性

来自分类Dev

如何在旅行商问题上的Matlab代码上实现轮盘选择和等级选择?

来自分类Dev

选择监督学习算法或无监督学习算法

来自分类Dev

增量浮点均值算法的选择(java)

来自分类Dev

使用选择算法的编译时间递归排序