[DS+Algo] 011 哈希】的更多相关文章

目录 1. hash 函数 2. 哈希表 3. 密码存储 1. hash 函数 关键词 任意长度输入 固定长度输出 特征 理论上输入跟输出并不是一对一 实际使用假定不会出现碰撞或者冲突 常用算法 (MD4 以前用,现在不大用了) MD5 SHA-1 应用场景 数字签名 文件校验 2. 哈希表 是根据关键码值(Key, value)直接进行访问的数据结构 常用算法 直接寻址 数字分析 平方取中 折叠法 随机数 除留余数法 冲突处理 链地址法 建立公共溢出区 再散列 扩大"范围" 性能 散…
1. 常见搜索方法 顺序查找 最优时间复杂度:O(1) 最坏时间复杂度:O(n) 二分法 最优时间复杂度:O(1) 最坏时间复杂度:O(logn) 二叉树 若是"二叉搜索树" 最优时间复杂度:O(1) 最坏时间复杂度:O(logn) 哈希 时间复杂度:O(1) 2. 二分查找的代码实现 顺序查找,就是一个循环遍历 BST,其实和二分换汤不换药 哈希,暂且按下不表 代码实现 from random import randrange def binary_search_1(lst, ite…
二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node(object): def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem self.lchild = lchild self.rchild = rchild class Tree(object): def __i…
目录 1. 树的概念 2. 树的术语 3. 树的种类 4. 常见应用场景 5. 二叉树 1. 树的概念 每个结点(节点)有 0 个或多个子结点 没有父结点的结点称为根结点 每一个非根结点有且只有一个父结点 除了根结点外,每个子结点可以分为多个不相交的子树 2. 树的术语 术语 释义 结点的度 一个结点含有的子树的个数称 树的度 一棵树中,最大的结点的度 叶结点 / 终端结点 度为零的结点 父亲结点 / 父结点 若一个结点含有子结点,则这个结点称为其子结点的父结点 孩子结点 / 子结点 一个结点含…
步骤 将数组列在一个表(一行多列)中,按特定的步长进行插入排序 步长从 length/2 到 1,每次除 2 将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序 算法性能 (根据步长序列的不同而不同) 最优时间复杂度:O(n1.3) 最坏时间复杂度:O(n2) 稳定想:不稳定 Python 代码示例 def shell_sort(lst): n = len(lst) gap = n // 2 while gap > 0: for i in range(gap, n, gap):…
目录 1. 快速排序 QuickSort 1.1 步骤 1.2 性能分析 1.3 Python 代码示例 2. 归并排序 MergeSort 2.1 步骤 2.2 性能分析 2.3 Python 代码示例 1. 快速排序 QuickSort 又称划分交换排序(partition-exchange sort) 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行 1.1 步骤 从数列中…
目录 1. 冒泡排序 BubbleSort 1.1 算法描述 1.2 性能分析 1.3 Python 代码实现 2. 选择排序 SelectionSort 2.1 算法描述 2.2 选择排序的主要优点 2.3 性能分析 2.4 Python 代码实现 3. 插入排序 Insertion sort 3.1 算法描述 3.2 性能分析 3.3 Python 代码实现 不妨默认将对象升序排序 1. 冒泡排序 BubbleSort 1.1 算法描述 从前向后,依次比较相邻的元素,若前一个比后一个大,就对…
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class Stack(object): def __init__(self): self.items = [] def is_empty(self): return self.items == [] def push(self, item): self.items.append(item) def pop(…
接上一篇 前言 本篇共 3 个代码实现 严格来说 code1 相当于模仿了 Python 的 list 的部分简单功能 code2 与 code3 简单实现了"循环单链表"与"双链表" 代码比较简单,但它们的行数相比于普通博文又显得有些长,所以单独写一篇 其实放到 GitHub 上更合适,我打算积几个再去 push 1. 模仿 Python 的 list 的一些功能 class SingleNode(object): def __init__(self, item)…
目录 1. 顺序表 1.1 分类 1.2 实现方式 1.3 扩容问题 1.4 操作 2. 链表 2.1 分类 2.2 链表相关操作 2.3 链表 VS 顺序表 3. 关于代码实现 1. 顺序表 1.1 分类 简单顺序表 索引顺序表 数据可以很不规则 数据物理排列可以不要求 索引的格式规整 1.2 实现方式 以更改是否方便为准 一体式 分离式 1.3 扩容问题 每次定量增长:节省空间,操作频繁 每次按比例增长:浪费 1.4 操作 增加 保存尾端插入 非保存 保存 删除:和增加类似 Python-l…