二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。...
分类:
其他好文 时间:
2014-09-18 11:31:23
阅读次数:
340
之前一直想读这篇,今天读了一下,颇有收获:
1.对文档按相似term聚类之后,delta较小,可以提高压缩率(similarity graph)
1.GPU一般可以有几百个核,有shared memory和global memory,shared memory相当于寄存器的速度,global memory速度较慢
2.有序数组上的搜索算法除了binary search还有interplati...
分类:
其他好文 时间:
2014-09-18 00:52:07
阅读次数:
239
1,2,3...,n这n个数字组成的一个有序数组称为一个n级(阶)排列,共有A(n,n)=n!个不同的排列。在一个n阶排列中如果较大的数排在较小的数的前面,,则称这两个数构成一个逆序.一个排列中的所有逆序的总和叫做这个排列的逆序数。逆序数为奇数的排列叫做奇排列,逆序数为偶数的排列叫做偶排列特别的,自...
分类:
其他好文 时间:
2014-09-14 20:30:37
阅读次数:
145
思想:循环有序数组最大的特点是利用二分查找时,有一边总是有序的,利用这个特点,利用value存储历史最小值
当左边有序,则用A[low]与value比较即可得出当前左边的最小值,然后跳转到右边看是否存在更小的;
如果右边有序,则用A[mid]与value比较,得出右边的最小值,然后跳转到左边查看是否有更小的。
算法复杂度为O(logn)
代码如下:#include
#include
#in...
分类:
其他好文 时间:
2014-09-13 12:06:55
阅读次数:
244
算法思想:
一共进行 array.size-1趟排序,每一趟排序,都将左右两个数进行比较大小,并且交换位置,这样的效果是:每一趟排序中,能找到最大的值冒泡到该趟排序的最后面,这样的话,第一趟排序,最后一个数是最大的,第二趟排序,倒数第二个数就是第二大的,最后一趟排序后 (因为最后一趟只有一个数,不用比较,所以比较次数是 array.size-1 趟),将得到有序数组
imp...
分类:
其他好文 时间:
2014-09-10 10:51:30
阅读次数:
188
#include
using namespace std;
int find2(int A[],int n)
{
int high=n-1;
int low =0;
int mid;
while(A[high]<=A[low])
{
if(high-low==1)
{
mid=high;
break;
}
...
分类:
其他好文 时间:
2014-09-04 22:18:50
阅读次数:
216
两个有序数组,各自含有n个元素,求第n大的元素
1.顺序遍历两个数组,计数变量k统计出现的第k个元素
代码如下:
int getmid(int a[],int b[],int n)
{
int k=0;
int i=0,j=0;
while(i<n&&j<n)
{
if(a[i]<b[j])
{
i++;
k++;
if(k==n)
retu...
分类:
其他好文 时间:
2014-09-02 00:22:54
阅读次数:
224
给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树。
由于数组是递增有序的,每次都在中间创建结点,类似二分查找的方法来间最小树。
struct TreeNode
{
int data;
TreeNode* leftChild;
TreeNode* rightChild;
};
void newNode(TreeNode*& vNode, int vData)
{
vNode...
分类:
其他好文 时间:
2014-08-30 02:24:58
阅读次数:
260
leetcode上有四道关于移除有序序列中重复数字的题目,其中两道为数组结构,两道为链表结构,分别为:
(1)Remove Duplicates from sorted array I:移除一个有序数组中的重复数字,并且返回新数组的大小。
(2)Remove Duplicates from sorted array II:移除一个有序数组中的重复数字,并且返回新数组的大小,和上道题目不同的是每...
分类:
其他好文 时间:
2014-08-29 18:24:28
阅读次数:
289
鉴于最近在网上看到的二分查找算法非常复杂,细节太多,不容易理解,下面给出几个实现简洁,又容易理解的代码模版。首先,让我们记住最基本的二分查找模版:在有序数组A中查找key,如果找到,返回位置索引,否则,返回-1;int BinarySearch(int A[], int n, int key){ ....
分类:
其他好文 时间:
2014-08-28 19:42:05
阅读次数:
255