一般,在作高性能計算時,咱們須要隨機的鏈接某些點。這些點都具備本身的度量值,顯然,度量值越大的值隨機到的機率就會越大。所以,採用加權值得方法:算法
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能夠根據本身的需求,來定義性能
問題背景:ui
指定的一個有序數組,給定一個隨機數,要查詢隨機數所在的區域,即大於前一個值,小於當前值,而當前值的下標,即便所需:spa
實現方式:code
__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__函數中使用便可,返回值即便要查詢的下標。blog