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的更多相关文章

  1. 数据结构与算法---查找算法(Search Algorithm)

    查找算法介绍 在java中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 1)线性查找算法 示例: 有一个数列: {1,8, 10, 89, 1000, 123 ...

  2. C++Primer STL算法

    //1.概览: // A:beg和end是表示元素范围的迭代器. // B:beg2是表示第二个输入序列开始位置的迭代器.end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少 ...

  3. 从Search Sort到Join

    发表于<程序员>2015年4月B的一篇文章,在博客归档下.根据杂志社要求,在自己博客发表该文章亦须注明:本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.ne ...

  4. search

    |—search()—|—添加一个列表变量Expend,存储每个小格扩展时为第几步,可打印出 |                    |—打印运动表 |—A*—|— heuristic() |—Dy ...

  5. C++ algorithm算法库

    C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在<algorithm>中.编程时,只需要在文件中加入#include<algo ...

  6. C++ 标准模板库(STL)——算法(Algorithms)的用法及理解

    C++ STL中的算法(Algorithms)作用于容器.它们提供了执行各种操作的方式,包括对容器内容执行初始化.排序.搜索和转换等操作.按照对容器内容的操作可将STL 中的算法大致分为四类: (1) ...

  7. [leetcode] 题型整理之查找

    1. 普通的二分法查找查找等于target的数字 2. 还可以查找小于target的数字中最小的数字和大于target的数字中最大的数字 由于新的查找结果总是比旧的查找结果更接近于target,因此只 ...

  8. c++中级 STL基础学习(二)

    deque 和vector差不多,可以在前端后端插入,一般用deque取代vector,vector只能在后端插入push_back().deque还可以push_front(),但是deque后端插 ...

  9. STL学习小结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...

随机推荐

  1. 优化脚本性能 Optimizing Script Performance

    This page gives some general hints for improving script performance on iOS. 此页面提供了一些一般的技巧,提高了在iOS上的脚 ...

  2. [atcoder002E] Candy Piles [博弈论]

    题面: 传送门 思路: 每一堆糖排成一列,所有列横着放,形成一个阶梯型 两个决策相当于左边一列去掉和最下面一行去掉 那么这个模型可以转化为同样形状的网格图,向左上方走,走到边界的赢· 然后一波数学推导 ...

  3. BZOJ3129 [Sdoi2013]方程 【扩展Lucas】

    题目 给定方程 X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A X2 < = A2 Xn1 < = An1 我们对第n1 + 1..n1+n2个 ...

  4. display:table布局总结

    1. table布局方式 2. table布局实际应用 效果: 代码: <!DOCTYPE html> <html lang="en"> <head& ...

  5. 重绘(repaints)与重排(reflows)

    当页面布局和几何属性改变时就需要"重排" 避免在修改样式的过程中使用 offsetTop, scrollTop, clientTop, getComputedStyle() 这些属性, 它们都会刷新渲 ...

  6. 很好用的取代 PuTTY 的SSH远程登陆软件 Termius

    一直以来, 我都是用 PuTTY 一个窗口一个窗口来监视我所有的远程服务器. putty-connections-on-a-screen 总感觉非常的不方便, 特别是当远程链接断开需要再重新打开PUT ...

  7. hdu 2189 dp

    /* 类似完全背包,容量为n的背包用素数填,求满背包的种数 dp(i,j)表示用不超过i的素数组成的j的种数 dp[i][j]=dp[i-1][j],若i为素数则dp[i][j]+=dp[i][j-i ...

  8. 贪吃蛇(bzoj 4213)

    Description  最近lwher迷上了贪吃蛇游戏,在玩了几天却从未占满全地图的情况下,他不得不承认自己是一个弱菜,只能改去开发一款更弱的贪吃蛇游戏. 在开发的过程中,lwher脑洞大开,搞了一 ...

  9. Bzoj2829 信用卡凸包

    Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 333  Solved: 155 Description Input ...

  10. 鼠标放在预览图a.gif上,旁边有放大图出现

    原文发布时间为:2009-04-23 -- 来源于本人的百度文章 [由搬家工具导入] <html><script type="text/javascript"&g ...