算法-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是一些"容器"的集合,这些" ...
随机推荐
- 第六篇:python基础_6 内置函数与常用模块(一)
本篇内容 内置函数 匿名函数 re模块 time模块 random模块 os模块 sys模块 json与pickle模块 shelve模块 一. 内置函数 1.定义 内置函数又被称为工厂函数. 2.常 ...
- 321. Create Maximum Number 解题方法详解
321. Create Maximum Number 题目描述 Given two arrays of length m and n with digits 0-9 representing two ...
- lcx 端口转发
1.查看3389端口开放情况: REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStati ...
- javaScript 笔记(6) --- jQuery(下)
目录 --- jQuery HTML --- jQuery 遍历 --- jQuery Ajax jQuery HTML: jQuery 捕获:三个简单实用的用于 DOM 操作的 jQuery 方法: ...
- 关于在redux当中 reducer是如何知道传入的state是初始化state下面的哪一条数据
首先初始化redux的数据 reducer 那么问题来了,todos这个reducer是如何知道传入的是初始化state下面的todos这条数据呢? 合并reducer 合并之后是这样的 他们之间的关 ...
- pat 甲级 1053. Path of Equal Weight (30)
1053. Path of Equal Weight (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- 《手把手教你学C语言》学习笔记(6)---数据类型和常量
计算机中需要保存信息,就需要数据存储,数据的存储就需要划分数据类型.主要包括:基本数据类型.指针类型.构造类型.空类型. 基本类型:整型---主要用来表示整数,可以分为无符号和有符号:又分为基本整型. ...
- [翻译][Nokogiri官方教程] 解析HTML/XML文档 / Parsing an HTML/XML Document
From a String From a File From the Internet Parse Options Encoding 原文: Parsing an HTML/XML Document ...
- hdu 5059(模拟)
Help him Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 4985(模拟)
Little Pony and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...