查找算法

【算法008】二叉树查找

前提是你 提交于 2019-11-27 05:21:01
代码: package com.example.chyer.demo; import java.util.Stack; public class Test { private String v; private Test left; private Test right; public static void main(String[] args) { // 初始化二叉树 Test parent = new Test(); parent.v = "4"; parent.left = new Test(); parent.left.v = "2"; parent.left.left = new Test(); parent.left.left.v = "1"; parent.left.right = new Test(); parent.left.right.v = "3"; parent.right = new Test(); parent.right.v = "6"; parent.right.left = new Test(); parent.right.left.v = "5"; System.out.println("先序遍历:"); parent.preOrder(); System.out.println("中序遍历:"); parent.infixOrder();

MySQL性能优化——索引

天涯浪子 提交于 2019-11-27 02:33:01
一、MySQL中索引的语法 1. 创建索引 1. 在创建表的时候添加索引 CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 2. 在创建表以后添加索引 ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name); 或者 CREATE INDEX index_name ON my_table(column_name); 注意: 1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 2. 根据索引查询 具体查询: SELECT * FROM table_name WHERE column_1=column_2;(为column_1建立了索引) 或者模糊查询 SELECT * FROM table_name WHERE column_1 LIKE '%三' SELECT * FROM table_name WHERE column_1 LIKE '三%' SELECT * FROM table_name WHERE column_1 LIKE '%三%' SELECT *

查找集合的重复项

若如初见. 提交于 2019-11-27 01:26:52
算法一: 新建两个List,ListA添加不重复的元素,ListB保存重复的元素,遍历原来的List,ListA不包含元素,添加到ListA中,ListA包含说明重复,添加到ListB中。 算法二: 使用Linq或者扩展方法+Lambda对集合进行分组,查找组内元素个数大于1 的组。 算法三: 对集合排序,遍历集合,当前元素与下一个元素相同,即认为是重复元素。 转载于:https://www.cnblogs.com/nzbbody/p/3317210.html 来源: https://blog.csdn.net/weixin_30436891/article/details/99234422

Qt生成灰度图(转载)

无人久伴 提交于 2019-11-27 00:11:42
项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环。 先补充一些基础知识: ---------------------------------------------------------------------------------------------------------------------------- 一:灰度图 灰度图就是黑白图,整幅图片只有不同程度的黑白两色。灰 度也可认为是亮度,简单的说就是色彩的深浅程度 ! 1 :如 果我们用八位来存储灰度图。则共有256种组合。那相当于:我们把从:纯黑 到 纯白 之间区分成了256种灰度。从而对应256种灰度值! 而如果用一个数字来表示的话:则0-255每个数字对应一种灰度! 2 :灰 度就是没有色彩, 它的 RGB 色彩分量全部相等。 比如 rgb(20,20,20)。 既然这样:我们完全可以用rgb中的某一个分量的值 来代替这个实际的灰度值! 比如上边这个例子:我们完全可以用20来代替这个灰度! 这是一个一一映射关系! -------------------------------------------------------------------------------------------------------------- 二:色彩表 色彩表就是表示当前所有颜色的一张表。

数据--第49课 - 线性索引查找

为君一笑 提交于 2019-11-27 00:07:54
第49课 - 线性索引查找 1. 索引的概念 索引是把一个关键字与它对应的记录相关联的过程。索引由若干个索引项构成,每个索引项包括关键字和其对应记录的位置,索引技术是组织大型数据库以及磁盘文件的重要技术。 线性索引:将索引项组织成线性结构。 非线性索引:将索引项组织成树形结构或图形结构。 2. 线性索引 (1)稠密索引:将数据集中的每个记录都做成一个索引项后存入线性表中。 (2)稠密索引的基本思想 ① 将数据记录的(关键码、地址)组织成索引表,并排序。 ② 当需要通过某个关键字key的值进行查找时可以利用二分查找或者插值查找等算法对(关键码,地址)表进行查找。 ③ 通过查找结果中的地址可以直接得到数据记录。 (3)稠密索引的特点 不需要对数据记录本身进行组织或者排序。 每一条数据记录对应索引表中的一个索引项。 (4)稠密索引的缺陷 当索引表不能完全放置于内存中时,查找效率将大打折扣。 (5)分块索引 分块索引的思想同样来源于生活中。 将数据集中的记录分成若干块。 块内无序:每一块中的记录可以是无序的. 块间有序:第n块中所有记录的关键字必须大于第n-1块中任一记录的关键字。 (6)分块索引的基本思想 以(最大关键码,块长,块指针)的方式组织索引表,并排序。 利用二分查找或者插值查找等在索引表中查找关键字所在块。 根据块首指针找到对应的块,并在块中查找数据记录。 (7)分块索引的特点

C++标准库(三)之STL算法

假如想象 提交于 2019-11-26 20:16:31
C++标准库(三)之STL算法 算法头文件: #include<algorithm> #include<numeric> 算法简介:STL算法采用覆盖模式而非安插模式,所以调用者必须保证有足够的操作空间。 函数对象类型声明:元素计数 UnaryProc:Op(elem),无返回值 CompFunc:Op(elem1,elem2),返回True或者False UnaryPredicate:Op(elem),返回True或者False BinaryPredicate:Op(elem,value),返回True或者False 非更易型算法 UnaryProc for_each(InputIterator beg,InputIterator end,UnaryProc Op) difference_type count(InputIterator beg,InputIterator end,const T& val) difference_type count_if(InputIterator beg,InputIterator end,UnaryProc Op) 最小值与最大值 ForwardIterator min_element(ForwardIterator beg,ForwardIterator end) ForwardIterator min_element

互联网公司面试经——你不得不知道的哈希表

孤街浪徒 提交于 2019-11-26 15:51:48
前言 哈希表,又名散列表。是非常常用的一种数据结构,C#的Hashtable、字典,Java的HashMap,Redis的Hash,其底层实现都是散列表。而在一些互联网公司的面试中,更是技术面试官们必问的一道题目。本文将简单了解哈希表(散列表)这种数据结构。 一、散列表 1.1 散列表 散列表(哈希表),其思想主要是基于数组支持按照下标随机访问数据时间复杂度为O(1)的特性。可是说是数组的一种扩展。假设,我们为了方便记录某高校数学专业的所有学生的信息。要求可以按照学号(学号格式为:入学时间+年级+专业+专业内自增序号,如2011 1101 0001)能够快速找到某个学生的信息。这个时候我们可以取学号的自增序号部分,即后四位作为数组的索引下标,把学生相应的信息存储到对应的空间内即可。 如上图所示,我们把学号作为key,通过截取学号后四位的函数后计算后得到索引下标,将数据存储到数组中。当我们按照键值(学号)查找时,只需要再次计算出索引下标,然后取出相应数据即可。以上便是散列思想。 1.2 散列函数 上面的例子中,截取学号后四位的函数即是一个简单的散列函数。 //散列函数 伪代码 int Hash(string key) { // 获取后四位字符 string hashValue =int.parse(key.Substring(key.Length-4, 4)); //

二叉查找树(查找、插入、删除)&mdash;&mdash;C语言

帅比萌擦擦* 提交于 2019-11-26 14:28:51
二叉查找树 二叉查找树(BST:Binary Search Tree)是一种特殊的二叉树,它改善了二叉树节点查找的效率。二叉查找树有以下性质: (1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值 (2)若右子树不空,则右子树上所有节点的值均大于它的根节点的值 (3)左、右子树也分别为二叉排序树 (4)没有键值相等的节点 二叉查找树节点的定义: 1 typedef struct BSTreeNode 2 { 3 int data; 4 struct BSTreeNode *left;//左子树 5 struct BSTreeNode *right;//右子树 6 }BSTree; 跟普通二叉树的节点定义相同 因为查找节点和插入节点都是在 已经构建好二叉查找树 的前提下才能进行的,在删除节点的时候才涉及到调整二叉树的操作,所以这里先以前序遍历的顺序直接输入一个二叉查找树,代码如下 View Code 1、查找节点(递归实现) 若根结点的关键字等于查找的关键字,查找成功,若小于根结点的关键字的值,递归查找左子树,若大于根结点的关键字的值,递归查找右子树,若子树为空,则查找失败,查找的操作较为简单,实现代码如下 1 /* 查找特定值 */ 2 void SearchData(int targ, BSTree *nod) 3 { 4 if (nod != NULL) 5 { 6

[MySQL] MySQL索引原理及优化

拥有回忆 提交于 2019-11-26 14:22:31
一 索引的本质   MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质: 索引是数据结构 。   数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。   最基本的查询算法当然是 顺序查找 (linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如 二分查找 (binary search)、 二叉树查找 (binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于 二叉查找树 上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织)。   所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。      图片展示了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找

Python系列(四)python元组与字典

好久不见. 提交于 2019-11-26 14:14:25
本文目录: 一、元组 | 二、字典 | 三、字典的使用方法 前言:列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一些列不可修改的元素,元组就可以满足你这样的需求。Python将不能修改的值称为不可变的,而不可变的列表就被称为元组。 正文部分: 一、元组 1、元组的概念 元组:(tuple),有序列表叫元组,tuple和list非常类似,不同之处是list列表可以修改元素,而元组是无法修改定义好的元素的。 元组使用“()”小括号来定义。 定义元组后,就可以使用索引来访问其元组,就像访问列表元素一样。 元组的类型是“tuple”。 xidamingzhu这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用xidamingzhu[0],xidamingzhu[-1],但不能赋值成另外的元素。 那不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。 Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎 如果要定义一个空的tuple,可以写成(): 但是