算法-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性能分析调优工具介绍
1.常用性能分析工具 1)CPU性能分析工具 vmstat ps sar time strace pstree top 2)Memory性能分析工具 vmstat strace top ipcs ip ...
- http的一些知识
TCP/IP协议分层 应用层 TFP DNS DNS域名解析的过程 在浏览器DNS缓存中搜索 读取系统的hosts文件,查找其中是否有对应的ip 向本地配置的首选DNS服务器发起域名解析请求 HTTP ...
- 【bzoj1520】[POI2006]Szk-Schools 费用流
题目描述 输入 输出 如果有可行解, 输出最小代价,否则输出NIE. 样例输入 5 1 1 2 3 1 1 5 1 3 2 5 5 4 1 5 10 3 3 3 1 样例输出 9 题解 费用流 设xi ...
- shell for 循环实践
for循环语法结构如下 [root@backup tmp]# .sh #!/bin/bash ` do echo $i done [root@backup tmp]# .sh 3 批量修改文件名 [r ...
- nodejs+express+mongodb搭建博客
https://github.com/lanleilin/sayHelloBlog 是可以运行的 https://github.com/lanleilin/sayHelloBlog 文件结构如下: c ...
- 【HDOJ5520】Number Link(费用流)
题意:NxM的格子有些上面有数字,现在要把奇数跟偶数配对连起来,其他的格子连成一个个回路, 单独的相邻两个格子相连也算是一个回路按两条边算,连线不能相交, 给出相邻两个格子相连的费用,求最小的总费用, ...
- LOJ#2244. 「NOI2014」起床困难综合症
$n \leq 1e5$个位运算操作,$m \le 2^{30}$,问$0-m$中谁进行完所有操作值最大,输出这个最大值. cfA题难度?当送分题就不管了 and相当于几个位取0,or相当于几个位取1 ...
- 不用框架使用ajax 纯js使用ajax post,get范例及其区别
原文发布时间为:2009-11-15 -- 来源于本人的百度文章 [由搬家工具导入] 不用框架使用ajax 纯js使用ajax post,get范例及其区别 ===================== ...
- Python 函数的一般形式及参数
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/01 21:46 # @Author : lijunjiang # @Fi ...
- Scrapy笔记:使用代理ip
scrapy框架使用代理ip的基本思路是修改请求对象中的meta['proxy']的值,将代理ip赋值给这个属性.遵循这个思路,只要是生成Request对象的地方都可以设置Request的值. dow ...