算法与数据结构
文章平均质量分 50
通过一些列的示例,理解算法与数据结构
快乐江小鱼
不定期更新一些精神粮食
展开
-
java解决全排列问题
给定一个可包含重复数字的序列 nums ,按任意顺序返回所有不重复的全排列。我们把问题看成n个排列成一行的空格,从左往右依次填入给定的n个数,每个数只能使用一次,可以使用回溯法。递归函数backtrack(idx, perm)表示当前排列为perm,下一个待填入的位置是第idx个位置,下标从0开始。(1)如果idx == n,说明填完了n个位置,找到了一个可行解,把perm放入结果数组中,递归结束;(2)如果idx < n,需要考虑第idx个位置填那个数。原创 2024-07-28 19:46:20 · 394 阅读 · 0 评论 -
Top K问题及解决
Top K问题:在大规模数据处理中,经常会需要在海量数据中找出频率最高的前K个数。比如,在搜索引擎中,统计搜索最热门的10个查询词等。针对Top K类问题,可以使用分治算法+Trie树/hash + 小/大顶堆,事先把数据集按照Hash方法分解成多个小数据集,然后使用Trie树或者Hash统计每个小数据集中查询词的频率,之后用小/大顶堆求出每个数据集中出现频率最高的前K个数,最后在所有Top K中求出最终的Top K。原创 2024-07-24 23:20:09 · 346 阅读 · 0 评论 -
哈夫曼编码及实现
哈夫曼树根据排序方式不同,也可能不太一样,这样对应的哈夫曼编码也不完全一样,但是树的带权路径长度(WPL)都是最小的。哈夫曼编码后的字节数组:[-88, -65, -56, -65, -56, -65, -55, 77, -57, 6, -24, -14, -117, -4, -60, -90, 28]哈夫曼编码后的字节数组:[-88, -65, -56, -65, -56, -65, -55, 77, -57, 6, -24, -14, -117, -4, -60, -90, 28](1)生成哈夫曼树;原创 2024-04-24 05:41:20 · 1034 阅读 · 0 评论 -
哈夫曼树及实现
在一棵树中,从一个节点往下可以到达的孩子或孙子节点之间的通路,通路中分支的数目称为路径长度。节点的带权路径长度为从根节点到该节点之间的路径长度与该节点的权的乘积;(Huffman Tree)又称为最优二叉树,带权路径长度最短的树,权值较大的节点离根较近,哈夫曼树主要应用于数据压缩和编码;权值越大的节点离根节点越近的二叉树才是最优二叉树。(2)选出权值最小的两棵树作为左右子树合并成一棵树,其根节点的权值为左右子树权值的和;(1)从小到大排序,把给定的n个节点看成n棵独立的树,每棵树只有一个节点;原创 2024-04-23 22:49:39 · 393 阅读 · 0 评论 -
平衡二叉树及实现
平衡二叉树(AVL树)又称为平衡二叉搜索树,可以保证高效的查询。平衡二叉树是一棵空树或者左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。把二叉树上的节点的左子树深度减去右子树深度的值称为平衡因子(BF)。原创 2024-04-23 17:26:25 · 202 阅读 · 0 评论 -
二叉排序树及实现
二叉排序树(Binary Sort Tree, BST)又称为二叉查找树。在一般情况下,查询效率要比链表结构要高。对于二叉排序树中的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。原创 2024-04-20 21:31:34 · 223 阅读 · 0 评论 -
二叉树入门
节点:包含一个数据元素及若干指向子树分支的信息;节点的度:一个节点拥有子树的数目称为节点的度;叶子节点:没有子树的节点或者度为零的节点;分支节点:度不为零的节点;树的度:树中所有节点的度的最大值;节点的层次:从根节点开始,假设根节点为第一层,根节点的子节点则为第二层,一次类推;树的深度/高度:树中所有节点的层次最大值;有序树:如果树中各棵子树的次序是有先后次序,就称该树为有序树;无序树:如果树中各棵子树的次序没有先后次序,就称该树为无序树;原创 2024-04-18 15:51:35 · 662 阅读 · 0 评论 -
KMP算法Java实现
KMP算法是一种高效的字符串匹配算法,核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数已达到快速匹配的目的。通过一个next()函数实现,该函数包含了模式串的局部匹配信息,KMP算法的时间复杂度是O(m+n)。原创 2024-04-08 17:56:55 · 458 阅读 · 0 评论 -
贪心算法Java实现
贪心算法(贪婪算法)是一个遵循启发式解决问题的算法范式,核心思想是通过在每一步的选择中都选用当前步骤下最优的选择,期望结果是最优的算法。贪心算法得到的结果不一定是最优结果,但是都是相对接近最优解的结果。原创 2024-04-07 11:25:57 · 850 阅读 · 0 评论 -
Java图简单入门
对比其他数据结构,线性表局限于一个直接前驱和一个后继的关系,树只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时,就需要使用图。图是一种数据结构,顶点可以有零个或多个相邻元素,两个顶点之间的连接成为边。图的概念涉及顶点、边、路径、无向图、有向图和带权图等。原创 2024-04-06 23:08:50 · 219 阅读 · 0 评论 -
双向链表概念及实现
单向链表查找的方向只能是一个方向,而双向链表可以向前或向后查找。单向链表不能进行自我删除,需要靠辅助节点,而双向链表可以实现自我删除。原创 2023-09-02 10:11:05 · 126 阅读 · 0 评论 -
队列的概念及实现
原则,先入队的数据,优先取出。队列的应用场景如银行排队等。队列是一个有序列表,可以用数组或链表来实现。原创 2023-09-02 08:59:59 · 135 阅读 · 0 评论 -
约瑟夫环实现
约瑟夫环小游戏:把小朋友按照编号1,2,3,…,n围成一圈,指定编号为k的小朋友从1开始报数,数到m的小朋友出队。接着他的下一位小朋友再次从1报数,以此类推,直到所有人都出队,产生了一个出队编号的序列。最后留在圈中的小朋友编号是:6。原创 2023-09-02 08:33:41 · 391 阅读 · 0 评论 -
查找算法及应用
常见查找算法及java实现原创 2023-08-20 20:55:54 · 105 阅读 · 0 评论 -
排序算法及实现
常见排序算法及java实现原创 2023-08-20 17:08:27 · 305 阅读 · 0 评论 -
栈及其应用
栈是一个先进后出的有序列表,允许插入和删除的一端是栈顶,固定的一端是栈底。栈的应用场景包括子程序调用、递归调用、表达式转换与求值、二叉树遍历、图的深度优先搜索算法等。原创 2023-08-20 13:39:25 · 178 阅读 · 0 评论 -
单链表的Java实现
Java实现单链表的增删改查,链表的反转、按序插入、查找链表中倒数第K个节点、正序和反序打印链表节点。原创 2023-05-23 15:52:58 · 46 阅读 · 0 评论 -
常见加解密算法示例
常见加解密算法java示例原创 2023-01-15 22:20:03 · 244 阅读 · 0 评论 -
递归算法示例
递归算法的简单示例,阶乘问题、迷宫问题、八皇后问题、汉诺塔问题、排列组合问题的求解原创 2023-01-15 21:38:59 · 155 阅读 · 0 评论 -
哈希表示例-雇员信息录入
Java语言简单哈希表实现雇员信息的存取原创 2023-01-05 18:41:31 · 67 阅读 · 0 评论 -
螺旋矩阵二维数组实现
通过二维数组实现了螺旋矩阵原创 2022-08-07 14:17:59 · 317 阅读 · 0 评论 -
暴力匹配算法
本文介绍了适合使用暴力破解的方式解决字符串的匹配问题原创 2022-08-07 14:53:41 · 1020 阅读 · 0 评论 -
稀疏数组的应用
本文讨论了稀疏数组结构,包括稀疏数组的实现、应用场景原创 2022-08-07 10:13:07 · 64 阅读 · 0 评论