Base
aaa_dai
https://github.com/Song2017
展开
-
HashTable 散列表
学习极客时间大牛的小结.散列表散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来.性能散列函数和填装因子是衡量散列表的主要标准填装因子: 散列表包含的元素数/散列表位置总数. 最大默认填装因子是0.75, 一旦填装因子大于0.7, 就要调整散列表长度装载因子过大时,可以进行动态扩容, 一般将空间长度加倍.针对hash表, 动态扩容后, ...原创 2018-12-09 17:52:24 · 275 阅读 · 0 评论 -
SkipList 跳表
跳表 SkipList是什么Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorit...原创 2019-06-05 09:30:09 · 248 阅读 · 0 评论 -
Graph 图
图 Graph图是一种非线性表结构, 用来模拟一组连接图的算法有很多, 比如图的搜索、最短路径、最小生成树、二分图等概念顶点(vertex):图中的元素边(edge):顶点之间建立的连接关系无向图: 边没有方向的图, 例如微信有向图: 边有方向的图, 例如微博带权图(weighted graph):每条边都有一个权重(weight). 带权图类比QQ, 权重就是QQ亲密度度(...原创 2019-05-30 19:57:13 · 808 阅读 · 0 评论 -
二分查找_BinarySearch
二分查找算法(Binary Search)又称折半查找算法, 是针对有序数据集合的查找算法, 时间复杂度为O(logn)优势1. 相较于散列表、二叉树这些支持快速查找的动态数据结构, 二分查找使用的内存空间是最少的. 2. 二分查找使用的数据结构一般是数组, 数组可以很好的利用CPU的缓存机制3. 散列表和二叉树都需要比较多的额外内存空间.局限性1. 二分查找依赖的是顺序表结...原创 2019-05-17 20:28:28 · 789 阅读 · 0 评论 -
Tree 树
树树是一种非线性数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合.概念节点: 组成树的元素为了更好的描述节点间的关系, 对节点间的关系进行了定义.父节点,子节点,兄弟节点根节点,叶节点Height, Depth, Level节点的高度: 节点到叶节点的最长边数, 从下向上度量节点的深度: 根节点到此节点的边数, 从上向下度量节点的层数: 节点的深度 +...原创 2019-03-27 20:44:46 · 360 阅读 · 0 评论 -
longestValidParentheses && mergeKListsFast
longestValidParentheses解决思路, 构建可以从栈中弹出的括号字符的索引的辅助列表class Solution def longestValidParentheses1(self, s: 'str') -> 'int': ''' 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 ...原创 2019-02-24 18:59:13 · 140 阅读 · 0 评论 -
基本数据结构小结
数组数组是一种线性表数据结构.它用一组连续的内存空间, 来存储一组具有相同类型的数据, 连续的内存空间, 保证数组的数据都连续的分布在物理介质上.拥有随机访问和快速访问的优势, 快速访问: CPU读取数据一般是取出一块儿连续的内存空间, 非常适合存取数组结构但是有需要连续内存的缺点.链表链表是一种物理存储单元上非连续、非顺序的线性存储结构, 通过指针将一组零散的内存块(结...原创 2019-02-22 10:53:26 · 228 阅读 · 0 评论 -
Stack 栈& Queue 队列
Stack 栈定义栈是一种遵循特定操作顺序(先进后出LIFO: last in first out),操作受限(只允许在一端插入或删除)的线性数据结构当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构操作push 压栈, 增加一个元素, 满则Overflowpop 出栈, 弹出栈顶元素, 空则Underflowpeek/...原创 2019-02-22 10:37:45 · 236 阅读 · 0 评论 -
排序算法小结
Sort Algrithem 排序算法分类O(n^2): 冒泡排序、插入排序、选择排序O(nlogn): 归并排序、快速排序O(n): 计数排序、基数排序、桶排序分析排序算法时间复杂度最好情况、最坏情况、平均情况原始数据的不同的有序程度,对应不同的时间复杂度.空间复杂度算法的内存消耗可以通过空间复杂度来衡量。原地排序算法:就是特指空间复杂度是 O(1) 的排序算法稳定性...原创 2019-01-02 11:49:00 · 388 阅读 · 0 评论 -
Python 实现Dijkstra算法_算法图解
DijkstraAlgorithm.py# 迪克斯特拉算法: 计算加权图中的最短路径# graph: 起点start,a,b,终点fin之间的距离graph = {}graph["start"] = {}graph["start"]["a"] = 6graph["start"]["a"] = 2graph[&原创 2018-01-09 22:17:27 · 7878 阅读 · 1 评论 -
数据结构与算法
数据结构与算法学习数据结构与算法之美的小结是什么:数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。数据结构是为算法服务的,算法是要作用再特定的数据结构上的。学什么:效率和资源消耗的度量衡–复杂度分析。最常用、最基础的20个数据结构与算法,学习他们的:“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。数据结构:数组、链表、栈、队列、散列表、二叉树...原创 2019-01-03 20:21:24 · 476 阅读 · 0 评论 -
Array 数组
Array 数组数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据.线性表数据结构:素之间是简单的线性关系, 每个元素至多有一个前继元素, 至多有一个后继元素(首位和末位只是单向的).像线段一样, 可以从入口或出口无限增减元素的数据结构.包括: 数组,链表、队列、栈等连续的内存空间, 保证数组的数据都连续的分布在物理介质上存储的数据具有相同类型...原创 2019-01-03 20:17:27 · 357 阅读 · 0 评论 -
Linked List 链表
Linked List 链表链表是一种物理存储单元上非连续、非顺序的线性存储结构,通过指针将一组零散的内存块(结点)串联在一起.组成链表的结点可以在运行时动态生成, 这就克服了数组需要预先知道数据大小的缺点优劣优势:离散分布: 结点之间的逻辑关系通过next指针确定, 结点离散的存储在内存中, 不需要占用连续的大内存块动态扩充: 只需要将尾结点由NULL指向新结点就实现了链表的扩充,...原创 2018-12-16 19:21:50 · 176 阅读 · 0 评论 -
Python_Quick-sort 快速排序
快速排序取基准值,元素按大小左右分区,然后进行递归直到每个分区只有一个元素或为空排序思想: 分而治之 D&C divide and conquer递归: 基线条件 不再进行递归的条件 设计数组时,多是数组为空或只有一个元素递归条件 继续调用函数自身的条件O(nlogn) n:每层元素的个数; logn:调用栈的高度.O(n):处理每层n个元素的时间; O(logn): 需要处...原创 2018-12-04 09:05:40 · 481 阅读 · 0 评论 -
Redis小结
Redis定义是一个非常快速的非关系数据库: 内存数据库,它存储了五种不同类型值的键映射: 字符串,列表,集合,哈希,排序集Redis支持磁盘上的内存持久存储: 支持通过命令将内存数据写入磁盘文件,也支持使用仅附加文件,配置为每秒同步或每次操作完成后同步支持读取性能的复制以及扩展写入性能的客户端分片.数据类型字符串(string)字符串类似于我们在其他语言或其他键值存储中看到...原创 2019-07-04 16:04:58 · 806 阅读 · 0 评论