算法-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是一些"容器"的集合,这些" ...
随机推荐
- vmware安装centos7 安装redis windows7访问redis
1.在windows7中安装vmware 2.在vmware中安装centos7 3.禁用centos7自带的firewalld.service 4.安装iptables防火墙 5.安装Redis 3 ...
- BZOJ 3931 网络吞吐量(最短路+拆点最大流)
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1607 Solved: 652 [Submit][St ...
- [BZOJ1066][luogu_P2472][SCOI2007]蜥蜴
[BZOJ1066][luogu_P2472][SCOI2007]蜥蜴 试题描述 在一个 \(r\) 行 \(c\) 列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥 ...
- oracle 修改数据 保险方法
oracle 中修改比较安全的方法:(pl/sql) 第一种方法: select * from temp where id=9 for update; 第二种方法: select t.*,rowid ...
- Brain Powerd计划
Brain Powerd这片子没有高清的版本,只有DVD..(我手上只有个DVDRip,X2字幕组的)同时字幕质量也不行. 开个坑用waifu2x压个好看一点(用DVDRip)的,码率大概是3.3M ...
- Nginx ServerName 配置说明(转)
Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 下面我就来说说server_name的使用吧: s ...
- 洛谷 [P3620] 数据备份
贪心神题 首先我们发现一个显然的贪心策略,连接相邻两个写字楼总是更优. 所以本题就变成了数轴上一堆点,要选 k 个彼此不相邻的区间,使得区间长度最小 对于 10000 的数据来说,我们可以用 DP 解 ...
- .NET发布网站出现了一系列问题(1)---“无法显示XML页”的解决办法
原文发布时间为:2008-09-11 -- 来源于本人的百度文章 [由搬家工具导入] 原因之一: 这种错误是由asp.net 帐户没有在iis注册造成的。原因可能是.net framework 2.0 ...
- jquery text
scenario: need to display raw xml, what does text() method do: <> converted to <> i.e. 把 ...
- display的32种写法
你知道『回』字有四种写法,但你知道display有32种写法吗?今天我们一一道来,让你一次性完全掌握display,从此再也不用对它发愁. 从大的分类来讲,display的32种写法可以分为6个大类, ...