cuda中的二分查找

简介:

  使用背景

通常,在做高性能计算时,我们需要随机的连接某些点。这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大。因此,采用加权值得方法:

复制代码
void getdegreeSum(DG *g){
    memset(degreeSum,0,sizeof(uint)*MAXSIZE);
    uint i,last=0;
    for(i=0;i<(g->n);i++){
        degreeSum[i] = g->v[i].desum+last;
        last = degreeSum[i];
    }
}
复制代码

这样degreeSum[]数组中存储的即是一个有序的数组,随机生成rand(max),随机数所在的区域的下表就代表选取到的点。

  传统的二分查找函数

传统的二分查找中,是指定元素,然后查找是否在其中,典型的算法如下:

复制代码
int bsearchWithoutRecursion(int array[], int low, int high, int target)
{
    while(low <= high)
    {
        int mid = (low + high)/2;
        if (array[mid] > target)
            high = mid - 1;
        else if (array[mid] < target)
            low = mid + 1;
        else //find the target
            return mid;
    }
    //the array does not contain the target
    return -1;
}
复制代码

其中Low与high可以根据自己的需求,来定义

  cuda中的二分查找应用

问题背景:

指定的一个有序数组,给定一个随机数,要查询随机数所在的区域,即大于前一个值,小于当前值,而当前值的下标,即使所需:

实现方式:

复制代码
__inline__ __device__ int binarySearch(uint *arr,uint length,uint target){
    int left=0;
    int right = length-1;
    while(left < right){
        int middle = (left+right)/2;
        if((target >= arr[middle-1]) && (target < arr[middle])){    //while(rand > degreedis[j])
            return middle;
        }
        else{
            if(target > arr[middle])
                left = middle+1;
            else
                right = middle-1;
        }
    }
    return left;
}
复制代码

引用的时候,直接在__global__函数中使用即可,返回值即使要查询的下标。

本文转自博客园xingoo的博客,原文链接:cuda中的二分查找,如需转载请自行联系原博主。
相关文章
|
15天前
|
搜索推荐 C语言 C++
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
|
2月前
|
机器学习/深度学习 存储 算法
Python排序——二分查找
Python排序——二分查找
24 0
|
3月前
|
算法 C++ Python
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
28 0
Python每日一练(20230425) 多数元素、二叉树层序遍历II、最接近的三数之和
|
9月前
|
存储 算法 Python
【力扣算法14】之 15. 三数之和 python
【力扣算法14】之 15. 三数之和 python
74 0
|
6月前
|
存储 算法 数据库
【Python查找算法】二分查找、线性查找、哈希查找
【Python查找算法】二分查找、线性查找、哈希查找
64 0
|
9月前
|
算法 Python
【力扣算法02】之寻找两个正序数组的中位数 - python
【力扣算法02】之寻找两个正序数组的中位数 - python
80 0
|
10月前
|
算法 索引 Python
Python|双指针解决三数之和问题
Python|双指针解决三数之和问题
56 0
|
10月前
|
算法 Python
Python实现二分查找算法
Python实现二分查找算法
60 0
|
Python
LeeCode-合并两个有序链表(python)递归
LeeCode-合并两个有序链表(python)递归
96 0
LeeCode-合并两个有序链表(python)递归
|
算法 Python
LeeCode-寻找两个正序数组的中位数(python)
LeeCode-寻找两个正序数组的中位数(python)
51 0