精华内容
下载资源
问答
  • 查找

    千次阅读 2013-07-08 15:59:01
    查找概述 l 查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素 l 关键字——是数据元素中某个数据项的值,它可以标识一个数据元素 l 查找方法评价 u 查找速度 u ...

    查找概述

    查找——也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素

    关键字——是数据元素中某个数据项的值,它可以标识一个数据元素

    查找方法评价

    查找速度

    占用存储空间多少

    算法本身复杂程度

    平均查找长度ASL(Average Search Length):为确定记录在表中的位置,需和给定值进行比较的关键字的个数的期望值叫查找算法的

    顺序查找

    查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较

    算法描述

    顺序查找方法的ASL



    折半查找

    查找过程:每次将待查记录所在区间缩小一半

    适用条件:必须采用顺序存储结构的有序表

    算法实现

    设表长为nlowhighmid分别指向待查元素所在区间的上界、下界和中点,k为给定值

    初始时,令low=1,high=n,mid=ë(low+high)/2û

    kmid指向的记录比较

    k==r[mid].key,查找成功

    k<r[mid].key,则high=mid-1

    k>r[mid].key,则low=mid+1

    重复上述操作,直至low>high时,查找失败

    算法描述

    分块查找

    查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找

    适用条件:分块有序表

    算法实现

    用数组存放待查记录,每个数据元素至少含有关键字域

    建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针

    算法描述

    查找方法比较

    顺序查找

    折半查找

    分块查找

    ASL复杂度

    最大

    最小

    两者之间

    表结构

    有序表、无序表

    有序表

    分块有序表

    存储结构

    顺序存储结构

    线性链表

    顺序存储结构

    顺序存储结构

    线性链表

    其它查找方法

    哈希查找

    二叉查找


       查找类的实现

    Find.java
    package datastructure.find;
    
    import datastructure.common.Strategy;
    
    /**
     * 查找
     * @author luoweifu
     *
     */
    public  class Find  {
    	
    	/**
    	 * 顺序查找
    	 * @param s 要排序的数组
    	 * @param key 关键字
    	 * @return 查找到的下标
    	 */
    	public static int arraySearch(int s[], int key) {
    		for(int i=0; i<s.length; i++) {
    			if(key == s[i])
    				return i;
    		}
    		return -1;
    	}
    	 /**
    	  * 折半查找的非递归实现
    	  * @param s 要排序的数组
    	  * @param low 最低点
    	  * @param high 最高点
    	  * @param key 关键字
    	  * @return 查找到的下标
    	  */
    	public static int binSearch(int []s, int low, int high, int key) {
    		while(low <= high) {
    			int mid = (low + high)/2;
    			if(s[mid] == key) return mid;
    			else if(s[mid] > key) high = mid-1;
    			else low = mid +1;
    		}
    		return -1;
    	}
    }
    


    StrategyCompare.java
    package datastructure.find;
    
    import datastructure.common.Strategy;
    
    /**
     * 比较策略
     * @author luoweifu
     *
     */
    public class StrategyCompare implements Strategy{
    	public boolean equal(Object obj1, Object obj2) {
    		// TODO Auto-generated method stub
    		return false;
    	}
    
    	@Override
    	public int compare(Object obj1, Object obj2) {
    		Integer n1 = (Integer)obj1;
    		Integer n2 = (Integer)obj2;
    		return n1.compareTo(n2);
    	}
    	
    }
    


    测试

    package datastructure.find;
    
    public class Test {
    	//测试
    	public static void main(String args[]) {
    		int a[] = {0,1,2,3,4,5,6,7,8,9};
    		int n;
    		n = Find.arraySearch(a, 5);
    		//n = Find.binSearch(a, 0, 9, 5);
    		System.out.println(n);
    	}
    	
    }
    

    结果:
    5

    展开全文
  • 快速查找Python安装路径方法

    万次阅读 多人点赞 2018-02-28 15:22:42
    我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事情,你要等...

    我相信一定有很多的人跟我一样,经常忘记Python安装的路径,每当用到的时候,最笨的办法就是在全局电脑里,直接查找Python,这样是肯定能查到的,但是如果你的电脑文件超级多,这将是一个工厂量很大的事情,你要等好久的。

    便捷的方法时:

    打开我们的cmd命令

    输入Python

    输入 import sys

    输入 print(sys.path)

    列表中的第五个将是你的安装路径

    二.

    最快的直接在cmd 里直接

    where python 即可

    展开全文
  • vim之快速查找功能

    万次阅读 多人点赞 2016-11-16 16:15:38
    vim有强大的字符串查找功能。 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ? 加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入 /super 或者 ?super, 两者的区别是前者是从上往...

          vim有强大的字符串查找功能。

          我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ?  加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入  /super  或者  ?super,  两者的区别是前者是从上往下搜索,后者是从下往上搜索。

          那么如果我想搜索本行中某个单词,并且这个单词很长的时候, 手动输入该字符串是非常麻烦的, 当然可以使用模糊匹配(如* 或 ?)来做, 不过这样可能搜得到很多其他的,不完全匹配的字符串。

          可以使用如下方式来实现快速查找:

    1, 最快的方式是让光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + *  ,即可快速选中该单词,并且可以通过 n  或  N 进行上一个或下一个的匹配。

     

    2, 让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n  或  N 进行上一个或下一个的匹配。

    解释一下:

    Ctrl + r 是指使用寄存器 , 你会发现先输入/ , 然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧? 合起来就是 /“0, 就是查找刚才复制的那个单词, 不懂的请查看上一个帖子:

    http://blog.csdn.net/ballack_linux/article/details/53078836

    3, 还有一种方式, 和第二种方式差不多,不过是将单词拷贝到系统剪贴板, 然后再从系统剪贴板拿出来。 即选中需要查找的单词, 然后输入 “+y, 然后输入/(Shfit + Ctrl + v), 就查找到了第一个匹配的单词, 并且可以通过 n  或  N 进行上一个或下一个的匹配。

     

    以上, 最方便的还是第一种, 高效快捷, 值得推荐!!

     

    升级版!!

    首先安装ag搜索工具, 输入如下命令:

    sudo  apt-get   install    silversearcher-ag

    接着在~/.vimrc中添加以下内容:

    " Set mapleader
    let mapleader = ","

     

    " for easy using sliver search
    nmap <leader>f :norm yiw<CR>:Ag! -t -Q "<C-R>""

    nmap <leader>r :norm yiw<CR>:Ag! -t "\b<C-R>"\b"


    " Locate and return character "above" current cursor position.
    function! LookUpwards()
        let column_num = virtcol('.')
        let target_pattern = '\%' . column_num . 'v.'
        let target_line_num = search(target_pattern . '*\S', 'bnW')


        if !target_line_num
            return ""
        else
            return matchstr(getline(target_line_num), target_pattern)
        endif
    endfunction


    imap <silent> <C-Y> <C-R><C-R>=LookUpwards()<CR>

     

    然后任意打开一个文件, 比如下图中的dhd_linux.c文件:

    将光标放在函数dhd_module_init上,通过快捷键“  + F ”(因为上面设置了mapleader是字符‘,’),即可在界面下方看到本路径下所有包含dhd_module_init的声明和调用:

     

    此时光标是在下方列出的方框内, 选择任意一行, 按Enter或  字母 “o” 即可跳转, 非常方便!!

    通过快捷键“  + R ” 可以使用正则表达式搜索\b<C-R>"\b 字符串。

    展开全文
  • 二分查找(折半查找

    万次阅读 多人点赞 2018-07-21 00:07:47
    二分查找是一种算法,其输入是一个有序的元素列表(必须是有序的),如果查找的元素包含在列表中,二分查找返回其位置,否则返回NULL 比如说有一个1-100的数字,我随机的选择其中一个数字(假设为60),你需要以...

    二分查找是一种算法,其输入是一个有序的元素列表(必须是有序的),如果查找的元素包含在列表中,二分查找返回其位置,否则返回NULL

     

    比如说有一个1-100的数字,我随机的选择其中一个数字(假设为60),你需要以最少的次数猜到我所选择的数字,每次猜测后,我会告诉你大了,小了,对了。

    假设你第一次从1开始猜,小了

    第二次:2  小了

    第三次:3  小了

    ……

    第五十九次:59 小了

    第六十次:60 对了

    这是简单的查找,每次猜测只能排除一个数字,如果我想的数字是100,那么你可能需要从1猜到100了!

    那么有没有更好的查找方式呢?

    答案当然是有的。

    如果我选的数字是60

    第一次:你从50开始猜,那么我告诉你小了,就排除了接近一半的数字,因为你至少知道1-50都小了

    第二次:你猜75,那么我告诉你大了,这样剩下的数字又少了一半!或许你已经想到了,我们每次猜测都是选择了中间的那个数字,从而使得每次都将余下的数字排除了一半。

    第三次:接下来,很明显应该猜测63,大了

    第四次:然后你猜56,小了

    第五次:然后你猜59 小了

    第六次:猜测61,大了

    第七次,你就能很明确的告诉我,答案是60!

    这样的查找方式,很明显比第一种要高效很多。第一种需要猜测60次才能猜出正确答案,而使用第二种方式,只需要七次就能猜出正确答案

    或许看到这里你已经明白了,这就是二分查找的方法。为什么二分查找要求有序,从这里也可以看出来。一般而言,对于包含n个元素的列表,用二分查找最多需要logn步,而简单查找最多需要n步。

    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int main(){ 
      int a[100];//注意这里的数组下标,即a[0]=1,a[1]=2……a[99]=100
      int guess;//猜测字符
      int flag=0;//设置标志位,区分是否查找成功
      int count=0;//统计比较次数
      int low=0,mid,high=99; 
      //初始化
      cout<<"1、初始化"<<endl;
      for(int i=0;i<100;i++){
          a[i]=i+1;
      }
      cout<<"2、要查找的数字"<<endl;
      cout<<"guess:";
      cin>>guess;
      cout<<"3、二分查找"<<endl;
      //二分查找
      while(low<=high){
    	  count++;
          mid=(low+high)/2;
    	 cout<<"第"<<count<<"次查找,其中low="<<low<<"   high="<<high<<"   mid="<<mid<<endl;
    	 if(guess==a[mid]){
    		 flag=1;
    		 cout<<"success!比较次数:"<<count<<"次"<<endl;
    		 break;//查找成功就退出,如果想要继续查找也是可以的
    	 }
    	 if(guess>a[mid]){
    		 low=mid+1;
    	 }
    	 if(guess<a[mid]){
    	      high=mid-1;
    	 }		
      }
      if(flag==0)
    	  cout<<"fail!"<<endl;
    }
     

    运行截图:

    查找在数组中的元素

     

    查找不在数组中的元素:

    展开全文
  • 算法 - 折半查找(C#)

    万次阅读 多人点赞 2019-03-14 20:09:56
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!... * 1、待查找序列必须采用顺序存储结构。 * 2、待查找序列必须是按关键字大小有序排列。 * * 时间复杂度:O(lo...
  • 查找】折半查找

    万次阅读 多人点赞 2019-01-28 02:40:22
    折半查找 如果从文件中读取的数据记录的关键字是有序排列的(递增的或是递减的),则可以用一种更有效率的查找方法来查找文件中的记录,这就是折半查找法,又称为二分搜索。 折半查找的基本思想:减少查找序列的...
  • intellij idea全局查找和替换

    万次阅读 多人点赞 2018-05-02 16:33:44
    lt;intellij idea使用教程汇总篇&gt; 全局查找 通过快捷键 Ctrl+Shift+f 快速进入全局查找页面,或者通过 Edit 》...3、查找范围,分别表示 在整个项目中查找、在指定模块中查找、在指定目录下查找、在指定...
  • 如果list中有5000个日期,恰好这个要查找的日期在最后面一个,那么肯定完蛋。 如果通过二分查找肯定会会少很多循环。 目标:找到集合中早于目标日期,并且最接近的一个日期,如果没有早于的则不返回 代码: ...
  • idea 查找与替换

    万次阅读 多人点赞 2019-06-13 23:14:05
    查找当前文件内容:ctrl+F 如上图片 查找全局文件:ctrl+shift+F 或double shift(按两下)或ctrl+shift+N 替换当前文件内容 :ctrl+R 如上图片
  • Eclipse的各种查找,类的查找,方法查找快捷键

    万次阅读 多人点赞 2018-07-05 14:27:12
    综合查找 Ctrl + H 这是一种综合查找 ,可以用来查找 一个方法的引用,或者某些特殊的标识,还可以通过注释里面的关键字查到想要的内容3,CTRL + F 这种查找是单页面的 查找某些特定的字符查找到字符然后 替换4....
  • linux下快速查找文件

    万次阅读 多人点赞 2018-05-30 11:32:10
    在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。  区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等...
  • Java在字符串中查找匹配的子字符串

    万次阅读 多人点赞 2017-05-07 15:25:25
    Java在字符串中查找匹配的子字符串
  • 查找表的概念 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的...
  • 【哈尔滨工业大学2005 四、1(8分)】画出对长度为18的有序的顺序表进行折半查找时的判定树,并指出在等概率时查找成功的平均查找长度,以及查找失败时所需的最多的关键字比较次数。 判定树如下: 图1-1判定树 ...
  • Linux下文件搜索、查找、查看命令

    万次阅读 多人点赞 2018-10-12 14:32:43
    Linux下文件搜索、查找、查看命令 1、最强大的搜索命令:find 一、根据 文件或目录名称 搜索 二、根据 文件大小 搜索 三、根据 所有者和所属组 搜索 四、根据 时间属性 搜索 五、根据 文件类型或i节点 搜索 六、组合...
  • linux中查找包含指定内容的文件

    万次阅读 2018-03-14 15:08:01
    为了防止自己记不住,也方便自己查找,特此记录在博客中查找包含指定内容的文件就是用grep这个命令grep 'name' -r / grep '指定内容' -r 目录上述命令就是在根目录下递归查找包含name内容的文件 -r 递归查找文件 -e ...
  • java实现二分查找(折半查找

    万次阅读 2019-04-02 10:18:31
    算法思想:要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到...
  • 二分查找

    万次阅读 2019-05-11 00:48:37
    二分查找 又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将...
  • Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找  【尊重原创,转载请注明出处】http://write.blog.csdn.net/postedit?ticket=ST-84189-RPiSkdLK6Dt1Oyqsgvsx-passport.csdn.net  目前查找方法...
  • 插值查找

    千次阅读 2020-04-29 18:10:31
    插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。 1)插值查找原理介绍: 插值查找...
  • C语言中折半查找法(二分法)的实现

    万次阅读 多人点赞 2019-03-31 20:40:15
    折半查找法也叫做二分查找,顾名思义,就是把数据分成两半,再判断所查找的key在哪一半中,再重复上述步骤知道找到目标key; 注意:(咳咳,敲黑板)折半查找法仅适用于对已有顺序的数组、数据进行操作!!! 很...
  • 二分法查找

    万次阅读 2019-08-04 16:55:11
    如何用最省内存的方式实现快速查找功能 二分法思想 二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0 二分查找非常...
  • 查找算法

    万次阅读 2020-08-23 12:57:53
    二分查找 public class BinarySearch { public static int rank(int key, int[] a) { int lo = 0; int hi = a.length - 1; while (lo < hi) { int mid = lo + (hi - lo) / 2; if (key < a[mid]) hi = ...
  • 然后在缩小的区间中继续进行同样的查找,如此重复直到找到为止,如果查找区间缩小到只有一个元素,其关键字仍不等于k,则查找失败。 每进行一次键值与给定值的比较,查找区间的长度至少减少为原来的二分之一。 ...
  • C语言数据结构之查找(顺序查找,折半查找) tips:前些天已经学习了树和图的相关知识,今天来总结下两种常用的查找方式(顺序查找,折半查找)。 为了演示方便,顺序查找和折半查找的数据存储结构就直接采用数组。...
  • 折半查找

    千次阅读 多人点赞 2019-04-22 22:52:56
    折半查找也称二分法查找,是一种在有序数组中查找某一特定元素的搜索算法。这种方法要求待查找的表顺序存储而且必须是有序的。 二、查找过程 首先计算表中间的位置,将表中间位置处的关键字与查找的关键字进行比较...
  • linux:根据关键字或日期查找日志

    万次阅读 2018-08-01 18:02:40
    后面跟关键字向上查找,按n查找下一个,按N查找上一个。 2.多个文件可以使用grep命令,比如 grep ERROR /var/log/messages*。会把匹配到ERROR这个关键字的行和所在的日志文件直接输出到屏幕。...
  • 查找算法-顺序查找、有序查找

    千次阅读 2016-12-06 16:15:44
    1.顺序表的查找 1)顺序查找 顺序查找又称为线性查找,是一种最简单的查找方法。  从表的一端开始,向另一端逐个按要查找的值key 与关键码key进行比较,若找到,查找成功,并给出数据元素在表中的位置;若...
  • OppoR17被查找手机锁死问题解锁

    万次阅读 热门讨论 2020-05-19 20:54:44
    1、概述 当没有退出Oppo账户的情况下通过向下键和电源键同时按下“清除数据”或者“格式化数据”时,如果账号设置了“查找手机”在重新启动过程中会提示“此...3、被查找手机锁死问题现象 4、解锁方案 4.1 准备条件
  • 顺序查找

    千次阅读 2020-04-13 06:24:51
    顺序查找: package com.neusoft.data.structure; /** * 顺序查找 * @author Administrator */ public class OrderSearch { /**顺序查找平均时间复杂度 O(n) * @param searchKey 要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 591,370
精华内容 236,548
关键字:

查找