
数据结构和算法
文章平均质量分 86
old~boy
java
展开
-
数据结构_树_6
一、什么是树树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。这里面每个元素我们叫作 “ 节点 ” ;用来连线相邻节点之间的关系,我们叫作 “ 父子关系 ” 。A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有父节点的节点叫作根节点,也就是图中的节点E。我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的G、H、I、J、K、L都是叶子节点。除.原创 2021-05-30 12:12:23 · 230 阅读 · 0 评论 -
数据结构和算法_哈希算法_5
一、什么是哈希算法将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。二、哈希算法的要求从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法);对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同;散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小;哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值三、哈希算法的应用3.1 安全加密①常用于加密的哈原创 2021-05-27 16:46:52 · 216 阅读 · 0 评论 -
数据结构和算法_散列表_4
散列表一、散列思想散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据。二、散列函数顾名思义,它是一个函数。我们可以把它定义成 hash(key) ,其中 key 表示元素的键值, hash(key) 的值表示经过散列函数计算得到的散列值。散列函数设计的基本要求散列函数计算得到的散列值是一个非负原创 2021-05-27 12:34:25 · 213 阅读 · 0 评论 -
数据结构和算法—跳表_3
一、跳表的概述一个值有序的链表建立多级索引,比如每 2 个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层。如下图所示,其中 down 表示 down 指针,指向下一级节点。以此类推,对于节点数为 n 的链表,大约可以建立 log2n-1 级索引。像这种为链表建立多级索引的数据结构就称为跳表。(并且Redis中的有序集合(Sorted Set)就是用跳表来实现的)那怎么来提高查找效率呢?如果像图中那样,对链表建立一级 “ 索引 ” ,查找起来是不是就会更快一些呢?每两个结点提取一个结点到原创 2021-05-27 11:53:35 · 209 阅读 · 0 评论 -
数据结构和算法_算法
一、递归算法1.1 问题描述:如何知道自己在电影院的第几排?1.2 问题解答你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看不清啊,所以他也问他前面的人。就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传回来。直到你前面的人告诉你他在哪一排,于是你就知道答案了这就是一个非常标准的递归求解问题的分解过程,去的过程叫 “ 递 ” ,回来的过程叫 “ 归 ” 。基本上,所有的递归问题都可以用递推公式来表示。1.3 问题结论原创 2021-05-26 18:34:17 · 220 阅读 · 0 评论 -
数据结构_线性表_2
1.1 数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并不是简单的前后关系。第二个是连续的内存空间和相同类型的数据。正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机访问”。但有利就有弊,这两个限制也让数组的很多操作原创 2021-05-26 18:20:08 · 219 阅读 · 0 评论 -
数据结构_时间复杂度_1
一、复杂度分析1.1 大 O 复杂度表示法 /** * 每行代码运行时间为:unit_time * * 总共花费时间:(2n+1)*unit_time * T(n) =(2n+1)*unit_time */ private static void addSum(int n) { int sum = 0; for (int i = 1; i <= n; ++i) { sum =.原创 2021-05-26 18:06:09 · 701 阅读 · 2 评论 -
常见排序算法
0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。图片名词解释:n: 数据规模k: “桶”的个数In-place转载 2020-06-22 23:02:21 · 230 阅读 · 0 评论