算法-search
O(big o) 是上限,是我们关注的算法的时间复杂度。数据量大,数据量涨一千倍,lgn的算法就是 耗费的时间就是10倍,o(n)就是一千倍,o(n2)就是一百万倍的差距
例一:Sequential search 算法复杂度o(n)。找到了o(n/2) ,没找到 o(n)
#include <stdio.h>
#include <stdlib.h>
#include <time.h> #define N 5000000
#define STEP 3
int a[N];
int g_nMax=; int main (void)
{
time_t t=; //以秒为单位
int i=,n=;
clock_t begin=,end=; //build an array (increasing),randomly
time(&t);
srand(t);
for(i=;i<N;i++){
a[i] = g_nMax + + (rand() % STEP);
g_nMax=a[i];
}
n=(rand() % g_nMax) +; begin=clock();
for(i=;i<N;i++){
if(a[i]==n){
printf("%d 找到了\n",n);
break;
}
}
if (i==N) printf("%d 找不到",n);
end = clock(); printf("sequetial search 花费时间:%d\n",end-begin);
}
例二:Binary search【先决条件,排序好了的数据】 o(lgn)
1024之类的数据,最多也就找11次,40亿的数据,最多也就找33次。
#include <stdio.h>
#include <stdlib.h>
#include <time.h> #define N 50000000
#define STEP 3
#define LOOP 1000
int a[N];
int g_nMax=; void binary_search(int min,int max,int n)
{
int mid=;
if(min>max){ // printf("%d找不到\n",n);
return;
}
mid =min+(max-min)/;
if(n==a[mid]){ // printf("%d 找到了\n",n);
return;
}
if(n<a[mid])
binary_search(min,mid-,n);
else
binary_search(mid+,max,n); } int main (void)
{
time_t t=; //以秒为单位
int i=,n=;
clock_t begin=,end=; //build an array (increasing),randomly
time(&t);
srand(t);
for(i=;i<N;i++){
a[i] = g_nMax + + (rand() % STEP);
g_nMax=a[i];
}
n=(rand() % g_nMax) +; begin=clock();
for(i=;i<N;i++){
if(a[i]==n){
printf("%d 找到了\n",n);
break;
}
}
if (i==N) printf("%d 找不到",n);
end = clock(); printf("sequetial search 花费时间:%d\n",end-begin); begin=clock();
for(i=;i<LOOP;i++)
{
binary_search(,N-,n); } end=clock();
printf("binary search 花费时间:%f\n",(float)(end-begin)/LOOP); }
例三:hashtable 复杂度o(1).大数据量,杂乱无序。
hash table size n 最好不是2或10的倍数,最好是质数,如2的n次方-1也很好
应用MD5
database :结构化数据 最好到1百万级别
search engin:极大数据量,几千万,几亿
算法-search的更多相关文章
- 数据结构与算法---查找算法(Search Algorithm)
查找算法介绍 在java中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 1)线性查找算法 示例: 有一个数列: {1,8, 10, 89, 1000, 123 ...
- C++Primer STL算法
//1.概览: // A:beg和end是表示元素范围的迭代器. // B:beg2是表示第二个输入序列开始位置的迭代器.end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少 ...
- 从Search Sort到Join
发表于<程序员>2015年4月B的一篇文章,在博客归档下.根据杂志社要求,在自己博客发表该文章亦须注明:本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.ne ...
- search
|—search()—|—添加一个列表变量Expend,存储每个小格扩展时为第几步,可打印出 | |—打印运动表 |—A*—|— heuristic() |—Dy ...
- C++ algorithm算法库
C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在<algorithm>中.编程时,只需要在文件中加入#include<algo ...
- C++ 标准模板库(STL)——算法(Algorithms)的用法及理解
C++ STL中的算法(Algorithms)作用于容器.它们提供了执行各种操作的方式,包括对容器内容执行初始化.排序.搜索和转换等操作.按照对容器内容的操作可将STL 中的算法大致分为四类: (1) ...
- [leetcode] 题型整理之查找
1. 普通的二分法查找查找等于target的数字 2. 还可以查找小于target的数字中最小的数字和大于target的数字中最大的数字 由于新的查找结果总是比旧的查找结果更接近于target,因此只 ...
- c++中级 STL基础学习(二)
deque 和vector差不多,可以在前端后端插入,一般用deque取代vector,vector只能在后端插入push_back().deque还可以push_front(),但是deque后端插 ...
- STL学习小结
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...
随机推荐
- 编译linux kernel及制作initrd ( by quqi99 )
编译linux kernel及制作initrd ( by quqi99 ) 作者:张华 发表于:2013-01-27 ( http://blog.csdn.net/quqi99 ) 运行一个l ...
- 为MYSQL加注释--mysql注释符
上午插入记录的时候一直没有成功,郁闷不知道为什么.因为是很多条记录一起插入,中间一些不用的数据就用"--"来注释了,结果没有效果. 没有办法,在网上找了找,才发现注释符" ...
- 【06】next() 伪函数
串行,第一个完成后,去执行第二个第二个异步任务,使用next()尾函数.首先我么想完成三个任务,task1,task2,task3,如图: 实现方式1: var fs = require(" ...
- 深入比较选择 Angular 还是 React
我应该选择 Angular 还是 React?现在JS框架两强的格局让许多开发者选择起来很纠结.无论你是一个正在思考如何入门的新手,还是一个为下个项目挑选框架的设计者,或是一个架构师为公司做长远的规划 ...
- Something about the microsoft HttpContext domain design
1. HttpContext.Current.Request, Response 2.HttpHandler-> ProcessRequest 3.HttpModule-> Init, I ...
- JS add script tag to dynamically call script
//IE: var script = document.createElement("script"); script.setAttribute("type", ...
- linux安全机制学习【转】
转自:http://blog.csdn.net/qq_20307987/article/details/51307820 曾经一度想学来着,今天看到一个链接,讲的很好,算是写一下加深印象吧 1 栈溢出 ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---45
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- python commands 模块
commands 模块 通过python调用系统命令 只适用于linux commands是提供linux系统环境下支持使用shell命令的一个模块 commands.getoutput(cmd) 只 ...
- Jquery操作层级选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...