查找算法

常用的Linux命令

让人想犯罪 __ 提交于 2019-11-30 12:43:50
学习链接: 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)

哈希索引和Btree索引的比较

…衆ロ難τιáo~ 提交于 2019-11-30 11:24:08
索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。 我们在mysql中常用两种索引算法BTree和Hash,两种算法检索方式不一样,对查询的作用也不一样。 一、BTree BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如: select * from user where name like ‘jack%’; select * from user where name like ‘jac%k%’; 如果一通配符开头,或者没有使用常量,则不会使用索引,例如: select * from user where name like ‘%jack’; select * from user where name like simply_name; 二、Hash Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。

ceshi

人走茶凉 提交于 2019-11-30 10:16:46
⭐ 我的网站: www.mengyingjie.com ⭐ 1线性表 1.1线性表的基本操作 方法名 含义 InitList(&L) 初始化表。构造一个空的线性表。 Length(L) 求表长。返回线性表L的长度,即L中数据元素的个数。 LocateElem(L,e) 按值查找操作。在表L中查找具有给定关键字值的元素。 GetElem(L,i) 按位查找操作。获取表L中第i个位置的元素的值。 ListInsert(&L,i,e) 插入操作。在表L中的第i个位置上插入指定元素e. ListDelete (&L,i, &e) 删除操作。刑除表L中第i个位置的元素,并用e返回删除元素的值。 PrintList(L) 输出操作。按前后顺序输出线性表L的所有元素值。 Empty(L) 判空操作。若L为空表,则返回true,否则返回false. DestroyList (&L) 销毁操作。销毁线性表,并释放线性表L所占用的内存空间。 1.2线性表的顺序表示 1.2.1顺序表的定义 静态 #define MaxSize 50 typedef struct { ElemType data[MaxSize]; int length; }SeqList 动态 #define InitSize 100 //表长度的初始定义 typedef struct{ ElemType *data; /

Java数据结构 - 查找算法

蓝咒 提交于 2019-11-30 09:26:01
1、线性查找(一层 for 循环)O(n) 1 // 线性查找 2 public int search(int target) { 3 // 遍历数组 4 for (int i = 0; i < elements.length; i++) { 5 if (elements[i] == target) { 6 if (elements[i] == target) { 7 return i; 8 } 9 } 10 } 11 // 没有找到指定的元素 12 return -1; 13 } 2、二分查找(注意循环的结束条件是开始大于等于结束)O(logn) 1 public int binarySearch(int target) { 2 // 记录开始位置 3 int begin = 0; 4 // 记录结束位置 5 int end = elements.length-1; 6 // 记录中间的位置 7 int mid = (begin+end)/2; 8 // 记录目标位置 9 int index = -1; 10 // 二分法查找 11 while (begin < end) { 12 // 判断中间的这个元素是不是要查找的元素 13 if (elements[mid] == target) { 14 index = mid; 15 break; 16 //

哈希表(散列表)原理详解

随声附和 提交于 2019-11-30 07:51:18
想要知道什么是哈希表,得先了解哈希函数知道 哈希函数 地址index=H(key) 说白了,hash函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表 几种常见的哈希函数(散列函数)构造方法   直接定址法 取关键字或关键字的某个线性函数值为散列地址。 即 H(key) = key 或 H(key) = a*key + b,其中a和b为常数。        除留余数法 取关键字被某个不大于散列表长度 m 的数 p 求余,得到的作为散列地址。 即 H(key) = key % p, p < m。        数字分析法 当关键字的位数大于地址的位数,对关键字的各位分布进行分析,选出分布均匀的任意几位作为散列地址。 仅适用于所有关键字都已知的情况下,根据实际应用确定要选取的部分,尽量避免发生冲突。        平方取中法 先计算出关键字值的平方,然后取平方值中间几位作为散列地址。 随机分布的关键字,得到的散列地址也是随机分布的。        折叠法(叠加法) 将关键字分为位数相同的几部分,然后取这几部分的叠加和(舍去进位)作为散列地址。 用于关键字位数较多,并且关键字中每一位上数字分布大致均匀。          随机数法 选择一个随机函数,把关键字的随机函数值作为它的哈希值。 通常当关键字的长度不等时用这种方法。 构造哈希函数的方法很多

算法第二章上机报告

可紊 提交于 2019-11-30 06:18:21
1.实践题目:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 2.问题描述:即对含n个整数的序列进行二分查找,找到所要查找的数时则返回其下标,找不到则返回-1,同时返回查找次数。 3.算法描述: 1 int BinarySearch (int *a, int size, int key) 2 { 3 if(key < 0 || key > a[size-1]) return -1; 4 int left = 0; 5 int right = size - 1; 6 int t = 0; 7 8 while (left <= right ) 9 { 10 t++; 11 int mid = (left + right) / 2; 12 if (a[mid] == key ) 13 { 14 cout << mid << endl; 15 cout << t ; 16 return mid ; 17 } 18 if (key < a[mid] ) 19 right = mid - 1; 20 else left = mid + 1; 21 } 22 cout << "-1" <<endl; 23 cout << t << endl; 24 return -1;

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

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

『浅入浅出』MySQL 和 InnoDB

不想你离开。 提交于 2019-11-30 03:16:13
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。

前端复习之JavaScript(ECMAScript5)

試著忘記壹切 提交于 2019-11-29 22:27:56
啦啦啦啦啦啦啦啦绿绿绿绿绿绿 1 1.JavaScript: 2 前段三大语言:HTML CSS js 3 HTML:专门编写网页内容的语言 4 CSS:专门编写网页样式的语言 5 js:专门编写网页交互行为的语言 6 原生js:不需要下载任何第三方文件就可以直接使用的js 7 ECMAScript(ES):ECMA制定的JavaScript语言国际标准规定js语言的核心语法 8 JavaScript:NetScape遵照ES标准实现的自己的js语言 9 JScript:Microsoft遵照ES…… 10 DOM:专门操作网页内容的程序标准 11 BOM:专门操作浏览器窗口的程序 12 js语言四大特点: 13 1.运行在脚本解释引擎中:脚本解释引擎:专门解析js语言并执行的小软件 14 1.浏览器自带脚本解释引擎:内容排版引擎和脚本解释引擎 15 2.独立安装的脚本解释引擎:Node.js 16 2.边解释边执行,后解释的相同内容会覆盖先解释的 17 3.弱类型: 18 声明变量时,不必提前规定变量的数据类型,一个变量先后可保存不同类型的数据 19 4.基于对象:core 1.使用 1 1. 页面中的script标签里: 2 一旦进入script标签内,就要使用js的语法 3 问题: 不符合内容与行为分离的原则——不便于维护和共用 4 2. 独立的js文件中: 5 引入:

STL:排序与检索

六眼飞鱼酱① 提交于 2019-11-29 22:14:29
首先来简单介绍一下STL是什么:STL全称“ standard template library”,中文名为“标准模板库”,可以这样说,STL就是“容器”,”算法“和其它一些组件的集合,目前它是c++中的一部分,用c++编写程序时可以直接使用。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。 在C++标准中,STL被组织为下面的17个头文件:< algorithm >、< deque >、< functional >、< iterator >、< array >、< vector >、< list >、<forward_list>、<map>、<unordered_map>、<memory>、< numeric >、< queue >、< set >、<unordered_set>、< stack >和< utility >。 其中容器部分主要由头文件< vector >,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。 算法部分主要由 头文件 <algorithm>,<numeric>和<functional>组成。 那么接下来要要探讨的 排序与检索