zoukankan      html  css  js  c++  java
  • 搜索问题

    1.顺序搜索

    #include<iostream>
    using namespace std;
    void search(int a[],int b,int n){
        for(int i=0;i<n;i++){
            if(a[i]-b==0) cout<<"位置 "<<i<<endl;
        }
    }
    int  main()
    {
        int a[]={1,2,3,4,5,6,7,8,9};
        search(a,2,9);
    } 
    View Code

    最好的复杂性为 1 最坏为 n

    是搜索中最慢的,但是

    a.如果序列里的元素没有规律可循,顺序搜索是我们唯一能用到的方法

    b.如果序列里的元素按照访问概率从高向低排列,顺序搜索是一种好办法

    2.折半搜索:前提是有序序列

    //折半搜索
    #include<iostream>
    using namespace std;
    int a[]={1,2,3,4,5,6,7,8};
    int binary(int x,int m,int n){
        int t=(m+n)/2;
        if(t==0) return 0;
        if(x>a[t]) return binary(x,t+1,n);
        else if(x<a[t]) return binary(x,m,t-1);
        else return 1;
        return -1;
    }
    int main()
    {
    //    int a={1,2,3,4,5,6,7,8};
        cout<<binary(2,0,7);
    } 
    View Code

    3.常数搜索

    搜索问题两个特点:范围很大 搜索操作很频繁

    折半搜索效率为lgn ,当n非常大时,lgn也会非常大,而搜索的频率很高,则搜索的聚类成本很高

    根本上搜索一个元素是这一个元素的事,并不涉及其他元素,理论上我们可以设计出常数时间的搜索算法,搜索不像排序,排序必须考察每个元素,也不像次序选择,次序选择牵扯到一个元素同其他元素之间的大小关系。排序和次序选择都无法在效率上超过线性级。

    如何实现?

    2019.3.11  常数实现我已经会了,朋友们谁给我点个赞我就更新一下!

  • 相关阅读:
    精简版的MySQL制作步骤
    WCF中常用的binding方式 z
    SQLite的.NET应用自适应32位/64位系统 z
    DEV GridControl 常用属性 z
    SpringBoot项目设置热部署
    SpringBoot整合Quartz定时任务
    单引号、双引号 转义符
    Java几种常见的四舍五入的方法
    Java集合之保持compareTo和equals同步
    你真的了解try{ return }finally{}中的return?(转载)
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10369137.html
Copyright © 2011-2022 走看看