查找算法

python_二叉查找树 堆排序 优先级队列

匿名 (未验证) 提交于 2019-12-02 22:11:45
Task5 【二叉树】 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树前、中、后序以及按层遍历 【堆】 实现一个小顶堆、大顶堆、优先级队列 实现堆排序 利用优先级队列合并 K 个有序数组 求一组动态数据集合的最大 Top K 二叉查找树(内部函数已实现BFS与三种DFS算法): class Node ( object ) : def __init__ ( self , value ) : self . value = value self . lchild = None self . rchild = None class BinarySearchTree ( object ) : def __init__ ( self , value ) : self . root = Node ( value ) def find ( self , value , node , parent , nodetype ) : if node is None : return False , node , parent , nodetype elif node . value == value : return True , node , parent , nodetype elif node . value < value :

常用的Linux命令

匿名 (未验证) 提交于 2019-12-02 21:56:30
linux命令学习1 linux命令学习2 history history命令就是历史记录. 它显示了在终端中所执行过的所有命令的历史. 参考链接: 1. 对Linux新手非常有用的 20个命令 grep 管道, 过滤, 作为linux中最为常用的三大文本(awk, sed, grep)处理工具之一, grep命令的常用格式为: grep [选项] "模式" [文件] , grep家族总共有三个: grep , egrep , fgrep , 一般常用grep. 扩展选项如下:  -E : 开启扩展Extend的正则表达式. -i : 忽略大小写ignore case. -n : 显示行号 -w : 被匹配的文本只能是单词, 而不能是单词中的某一部分, 如文本中有liker, 而我搜寻的只是like, 就可以使用-w选项来避免匹配liker --color :将匹配到的内容以颜色高亮显示. 参考链接: 1. linux中grep命令的用法 awk 1. awkѧϰ sed 1. sedѧϰ xxx --help(man xxx) xxx --help, 是对xxx命令的常用选项和用法格式的一个介绍, man xxx也是介绍, man的内容比较复杂是详细介绍, xxx --help比较简洁, 简单介绍 pwd 当前路径(dirs) l(ls) 显示给出路径之中的文档列表 Usage:

算法:二分法查找

匿名 (未验证) 提交于 2019-12-02 21:52:03
package com.atguigu;public class Main { public static void main(String[] args) { //二分法查找 //前提:所查找的数组必须有序 int[] arr=new int[]{-98,-34,2,34,54,66,79,105,210,333}; int dest=-3; int head=0;//初始的首索引 int end=arr.length-1; boolean isFlag=true; while(head<=end){ int middle=(head+end)/2; if(dest==arr[middle]){ System.out.println("找到指定的元素,位置为"+middle); isFlag=false; break; }else if(arr[middle]>dest){ end=middle-1; }else{ head=middle+1; } } if(isFlag){ System.out.println("很遗憾,没有找到"); } }} 来源:博客园 作者: Java后端小白 链接:https://www.cnblogs.com/helloworld0903/p/11456552.html

算法:线性查找(重点isFlag标志)

匿名 (未验证) 提交于 2019-12-02 21:52:03
package com.atguigu;public class Main { public static void main(String[] args) { String[] arr=new String[]{"JJ","DD","MM","BB","GG","AA"}; //线性查找 String dest="BB"; boolean isFlag=true; for(int i=0;i<arr.length;i++){ if(dest.equals(arr[i])){ System.out.println("找到指定的元素,位置为:"+i); isFlag=false; break; } } if(isFlag){ System.out.println("很遗憾,没有找到奥"); } }} 来源:博客园 作者: Java后端小白 链接:https://www.cnblogs.com/helloworld0903/p/11456502.html

算法 - 二分法查找

岁酱吖の 提交于 2019-12-02 15:28:47
什么是二分法查找 免费小说网站 https://www.kuwx.net/ 二分法查找主要是为了快速查找给定数组内,期待值在数组中的位置(下标) 二分法查找通过对整个数组取中间值,判断期待值所在的范围并缩小范围,每次查找范围折半,直到范围的边界重合,得出期待值的位置,如果找不到返回null 二分法有一个先决条件是:数组内元素必须是有序的 简单图解 给定一个包含1,3,5,7,8,9这一个元素的有序数组,求得期待值7所在的位置,下边用绿块表示指针所在位置 若是按照直接遍历的方式,绿块会从数组的第一个下标开始比较,直到7所在的下标得到结果,遍历需要4次,下边演示下二分法的图示 第一次 ,取值范围为整个数组,取数组长度中间值(0+5)/2取整2作为下标 取中间值初始以数组的第一个下标与最后一个下标相加取中间值,如果不为整,舍去小数部分 比较期待值与下标为2的值大小,发现5<7,7这个值应在中间值的右侧 缩小查找范围为中间值+1与最大下标 第二次 ,范围缩小为原数组的一半,下标不变,取中间值(3+5)/2=4 下标4对应的值8,大于7,所以向左取范围最小下标3,最大下标4-1=3 第三次 ,取中间值(3+3)/2=3,下标3上的值恰好与期待值相等,返回下标3 虽然看起来只少了一次,原因在数组的长度小,另外就是期待值设置的小, 再举个长一点的例子,这里有1-100的数组,100个元素

13. 字符串查找

人盡茶涼 提交于 2019-12-02 15:09:21
对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。 样例 样例 1: 输入: source = "source" , target = "target" 输出:-1 样例解释: 如果source里没有包含target的内容,返回-1 样例 2: 输入: source = "abcdabcdefg" ,target = "bcd" 输出: 1 样例解释: 如果source里包含target的内容,返回target在source里第一次出现的位置 挑战 O(n2)的算法是可以接受的。如果你能用O(n)的算法做出来那更加好。(提示:KMP) 说明 在面试中我是否需要实现KMP算法? 不需要,当这种问题出现在面试中时,面试官很可能只是想要测试一下你的基础应用能力。当然你需要先跟面试官确认清楚要怎么实现这个题。 public class Solution { /** * @param source: * @param target: * @return: return the index */ public int strStr(String source, String target) { // Write your code here if (source =

算法问题实战策略 DICTIONARY todo

随声附和 提交于 2019-12-02 14:33:33
地址 https://algospot.com/judge/problem/read/WORDCHAIN 解答: 1 书上的解法是制作有向图 然后查找欧拉回路 代码实现稍后 2 个人觉得 可以使用收尾单词作为关键字 去哈希 然后进行哈希查找与DFS结合的搜索 看看最后能否将单词全部使用 代码实现稍后 来源: https://www.cnblogs.com/itdef/p/11750451.html

查找算法之线性查找

强颜欢笑 提交于 2019-12-02 14:29:55
<?php /** * 线性查找 * * @param string $find 要查找的值 * @param array $array 要查找的数组 * @return bool|string */ function linearSearch ( $find , array $array ) { foreach ( $array as $key = > $value ) { if ( $find == $value ) { // 找到,返回数据 return $value ; } } // 未找到 return false ; } // 创建一个 1 到 100 的数组 $array = range ( 1 , 100 ) ; // 将数组乱序 shuffle ( $array ) ; // 要查找的数值 $find = '40' ; $result = linearSearch ( $find , $array ) ; var_dump ( $result ) ; 来源: https://blog.csdn.net/qq_42565994/article/details/102775229

插值查找

て烟熏妆下的殇ゞ 提交于 2019-12-02 12:47:33
插值查找算法 算法思想 假如有一本英文的字典,你现在要查找apple这个单词,你肯定不会一页页去翻,也不会从中间去翻,你肯定会去前边翻,因为你知道字典是有序的,从A-Z,已知A在前面,所以你一定会去前面翻 同样的,对于一个值均匀增长的一个数组来说,已知一个值的大小,我们就可以按照值的分布规律来猜测它的下标 假设值随下标增加如上图所示,现在已知值求下标,那么通过函数公式可知道y-a[low] =(a[high]-a[low])/(high-low) (x-low),那么代入要查找的值key,就可以求出大概的下标index = low + (high - low) (key - a[low])/ (a[high] - a[low]) 代码实现 package search; public class InterpolationSearch { public static void main(String[] args) { // TODO Auto-generated method stub int[] a= {1,2,3,4,5,6,7,8,9}; int index=interpolationSearch(a, 6); System.out.println(index); } public static int interpolationSearch(int[] a,int key

查找算法--二分查找

北慕城南 提交于 2019-12-02 11:34:01
1、什么是二分查找 二分查找又称为 折半查找, 首先是从 有序数组(必须是有序数组) 的中间元素开始查找,如果中间元素是查找数,就返回; 如果中间元素大于或者小于查找数,就从大于或小于查找数的一方继续执行二分查找;没找到就返回空,二分查找和传统查找的差别可以看上图 2、二分查找代码思路: 确定该数组的中间下标mid mid=(left+right)/2 让待查找数target和arr[mid]比较 当target>arr[mid]时,说明查找数在mid右边,继续向右边递归查找 当target<arr[mid]时,说明查找数在mid左边,继续向左边递归查找 当target==arr[mid]时,说明查找数已经找到,返回 比较完后找不到,设置递归退出条件:left>right 3、代码实现: static List Index=new ArrayList(); //后面查找元素是多个时使用 public static void main(String[] args) { int arr[]={1,3,5,7,11,11,11,13,17,19,23,29,31,37,41}; Search(arr,0,arr.length-1,11); System.out.println(Index); }  当查找数是单个时: public static int Search(int[] arr