数据结构
1. 数组
2. 链表
3. 栈
4. 队列
5. 哈希表
6. 树
7. 图
8. 堆
9. 字典树(Trie)
10. 并查集
11. 哈希集合
12. 哈希映射(哈希表)
算法
1. 排序算法
2. 搜索算法
3. 动态规划
4. 图算法
5. 字符串匹配算法
6. 数学算法
7. 贪心算法
8. 分治算法
9. 回溯算法
10. 网络流算法
11. 随机化算法
12. 位运算算法
13. 哈希算法
数据结构
1. 数组
数组:一种线性数据结构,用于存储固定大小的同类型元素。数组中的元素可以通过索引访问。适用于需要快速访问和修改元素的场景。例如,存储和操作用户列表中的数据。
2. 链表
单链表:由一系列节点组成,每个节点包含数据和指向下一个节点的引用。适用于频繁插入和删除操作的场景。例如,实现一个动态的任务队列。
双链表:每个节点包含数据、指向前一个节点的引用和指向后一个节点的引用。适用于需要双向遍历的场景。例如,实现一个双向链表的数据缓存。
3. 栈
栈:一种只能在一端进行插入或删除的线性表,遵循后进先出(LIFO)的原则。适用于表达式求值、括号匹配、函数调用栈等。例如,检查一个字符串中的括号是否匹配。
4. 队列
普通队列:一种只能在两端进行插入或删除的线性表,遵循先进先出(FIFO)的原则。适用于任务调度、消息传递等。例如,实现一个多任务处理系统。
优先队列:一种特殊的队列,其中每个元素都有一个优先级,优先级最高的元素最先出队。适用于任务调度、事件驱动系统等。例如,实现一个任务调度器,优先处理高优先级的任务。
5. 哈希表
哈希表:一种通过哈希函数将键映射到索引的数据结构,支持快速的插入和查找操作。适用于需要快速查找和插入的场景。例如,实现一个用户登录系统,快速查找用户信息。
6. 树
二叉树:每个节点最多有两个子节点的树结构。适用于数据的层次化存储和快速查找。例如,实现一个文件系统的目录结构。
二叉搜索树:每个节点的左子树只包含小于该节点的键,右子树只包含大于该节点的键。适用于需要快速查找、插入和删除的场景。例如,实现一个动态的字典,快速查找单词定义。
平衡二叉树(AVL树):一种自平衡的二叉搜索树,通过旋转操作保持树的高度平衡。适用于需要保持树高度平衡的场景。例如,实现一个高性能的数据库索引。
红黑树:一种自平衡的二叉搜索树,通过颜色标记和旋转操作保持树的平衡。适用于需要高效插入和查找的场景。例如,实现一个高效的符号表。
7. 图
有向图:图中的边有方向,表示从一个节点到另一个节点的关系。适用于表示有向关系的场景,如网页链接、社交网络等。例如,实现一个社交网络,表示用户之间的关注关系。
无向图:图中的边没有方向,表示两个节点之间的关系是对称的。适用于表示对称关系的场景,如道路网络、分子结构等。例如,实现一个城市交通网络,表示各个路口之间的连接。
加权图:图中的每条边都有一个权重,表示边的重要性或代价。适用于需要考虑边权重的场景,如最短路径问题、网络流量优化等。例如,实现一个物流网络,计算货物运输的最短路径。
8. 堆
二叉堆:一种完全二叉树,满足堆属性(最大堆或最小堆),根节点是最大或最小的元素。适用于需要快速获取最大或最小元素的场景。例如,实现一个优先队列,处理高优先级的任务。
斐波那契堆:一种高级的堆结构,支持高效的插入、合并和删除操作。适用于需要高效处理大量数据的场景。例如,实现一个大规模的数据处理系统,优化任务调度。
9. 字典树(Trie)
字典树(Trie):一种树形数据结构,用于存储字符串集合,每个节点代表一个字符。适用于需要高效前缀匹配的场景,如单词自动补全、拼写检查等。例如,实现一个搜索引擎的自动补全功能。
10. 并查集
并查集:一种用于处理不相交集合的合并和查询操作的数据结构。适用于需要动态维护集合的场景,如连通性检测、图的划分等。例如,实现一个社交网络,检测用户之间的连通性。
11. 哈希集合
哈希集合:一种基于哈希表的集合数据结构,支持快速的插入和查找操作,不允许重复元素。适用于需要快速查找和去重的场景。例如,实现一个去重功能,过滤掉重复的用户输入。
12. 哈希映射(哈希表)
哈希映射(哈希表):一种基于哈希表的键值对数据结构,支持快速的插入、查找和删除操作。适用于需要快速查找和插入键值对的场景。例如,实现一个用户信息管理系统,快速查找用户信息。
算法
1. 排序算法
快速排序:一种高效的排序算法,通过递归方式将数组分成两部分,然后分别对这两部分进行排序。适用于大规模数据的排序,特别是在内存充足的情况下。例如,对用户列表按年龄进行排序。
归并排序:基于分治思想的排序算法,将已有序的子序列合并,最终得到完全有序的序列。适用于大数据量的外部排序,因为它稳定且容易并行化。例如,合并多个已排序的日志文件。
插入排序:简单直观的排序方法,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。适用于小规模数据或基本有序的数据。例如,对用户输入的少量数据进行实时排序。
选择排序:通过遍历数组找到最小(或最大)元素的位置,并将其移动到数组的开始位置。适用于小规模数据,尤其是内存限制较大的情况。例如,对一个小型数据库中的记录进行排序。
冒泡排序:重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。适用于教学和演示,实际应用较少。例如,教育用途,展示排序过程。
2. 搜索算法
二分查找:在有序数组中查找特定元素的高效算法,每次排除一半的数据。适用于已排序的数据集,需要快速查找特定元素。例如,在一个已排序的用户ID列表中查找某个用户的ID。
深度优先搜索(DFS):用于图或者树结构中的遍历或搜索算法,通过递归或栈实现。适用于图的遍历、迷宫求解、路径查找等。例如,在社交网络中查找两个人之间的最短关系链。
广度优先搜索(BFS):同样用于图或树的遍历算法,按照宽度逐层搜索节点,通常使用队列实现。适用于最短路径问题、连通性检测等。例如,在地图应用中查找两点之间的最短路径。
3. 动态规划
背包问题:解决如何用最少的空间装下价值最大的物品的问题,分为0/1背包和完全背包。适用于资源分配、投资组合优化等。例如,在旅行中选择携带哪些物品以最大化旅行体验。
最长公共子序列(LCS):找出两个字符串中最长的公共部分。适用于文本比较、生物信息学中的DNA序列比对等。例如,比较两个版本的文档,找出修改的部分。
最短路径问题:如Dijkstra算法,用于计算从一个顶点到所有其他顶点的最短路径。适用于路由规划、网络通信等。例如,在导航系统中计算从起点到终点的最短路径。
4. 图算法
最小生成树:如Prim算法和Kruskal算法,用于寻找连接所有顶点且权重和最小的边集合。适用于网络设计、电路板布局等。例如,设计一个成本最低的城市电网。
拓扑排序:对有向无环图(DAG)的顶点进行线性排序。适用于任务调度、依赖解析等。例如,编译器中对依赖模块进行编译顺序安排。
强连通分量:如Tarjan算法,用于查找图中的强连通子图。适用于网络分析、社区发现等。例如,在社交网络中识别紧密联系的用户群体。
5. 字符串匹配算法
KMP算法:用于在一个文本中搜索给定模式的所有出现位置,避免了回溯。适用于文本搜索、模式匹配等。例如,在大型文档中查找特定关键词。
Boyer-Moore算法:另一种高效的字符串搜索算法,通过跳过不可能匹配的部分来加速搜索。适用于文本编辑器、搜索引擎等。例如,在搜索引擎中快速查找用户输入的查询词。
6. 数学算法
素数判断:用于检测一个数是否为素数,常用的方法有试除法和Miller-Rabin素性测试。适用于加密算法、数学建模等。例如,生成RSA密钥对时选择大素数。
最大公约数(GCD)和最小公倍数(LCM):利用欧几里得算法(辗转相除法)来计算两个数的最大公约数,进而可以计算最小公倍数。适用于分数简化、周期计算等。例如,计算两个齿轮的啮合周期。
大数计算:使用BigInteger和BigDecimal类来处理超出普通数值范围的大数运算。适用于金融计算、科学计算等。例如,银行系统的精确货币计算。
7. 贪心算法
霍夫曼编码:一种用于数据压缩的算法,通过构建霍夫曼树来实现字符的不等长编码,从而减少数据存储空间。适用于数据压缩、文件传输等。例如,压缩文本文件以节省存储空间。
活动选择问题:选择尽可能多的互不重叠的活动,每个活动有一个开始时间和结束时间。适用于时间表管理、资源调度等。例如,安排会议日程,确保会议室利用率最高。
8. 分治算法
矩阵乘法:如Strassen算法,利用分治法减少标准矩阵乘法中的乘法次数。适用于图像处理、机器学习等。例如,在深度学习中加速矩阵运算。
大整数乘法:类似于矩阵乘法,通过分治法减少大整数乘法的计算量。适用于密码学、大数计算等。例如,在RSA加密中进行大数乘法。
9. 回溯算法
八皇后问题:在一个8×8的棋盘上放置8个皇后,使得任何一个皇后都无法直接吃掉其他皇后。适用于组合优化、约束满足问题等。例如,解决复杂的组合问题,如调度问题。
全排列:生成一个数组的所有可能排列。适用于密码破解、组合优化等。例如,生成所有可能的密码组合以进行安全性测试。
10. 网络流算法
最大流问题:使用Ford-Fulkerson算法或Edmonds-Karp算法找到从源点到汇点的最大流量。适用于网络路由、资源分配等。例如,在网络中分配带宽,使总的流量最大。
最小费用流问题:在保证流量最大化的同时,使得总费用最小。适用于物流配送、供应链管理等。例如,在物流网络中优化运输路线,使总成本最低。
11. 随机化算法
随机化快速排序:通过对基准值的选择引入随机性,以提高算法的平均性能。适用于大数据排序,尤其是在数据分布未知的情况下。例如,对大量用户数据进行随机排序。
Monte Carlo算法:通过随机抽样来估计解的近似值,常用于数值积分、优化等问题。适用于物理模拟、金融建模等。例如,估算圆周率π的值。
12. 位运算算法
位掩码:使用位运算来实现高效的状态管理和逻辑操作。适用于权限控制、状态标记等。例如,在用户权限管理系统中,使用位掩码表示用户的多种权限。
位计数:计算一个整数的二进制表示中有多少个1。适用于数据压缩、哈希函数等。例如,在哈希表中计算哈希值的分布情况。
13. 哈希算法
布隆过滤器:一种空间效率高的概率型数据结构,用于测试一个元素是否属于一个集合。适用于缓存过滤、垃圾邮件检测等。例如,在搜索引擎中过滤掉已知的垃圾邮件。
一致性哈希:用于分布式系统中,确保数据均匀分布并减少节点变动时的数据迁移量。适用于负载均衡、分布式缓存等。例如,在分布式数据库中分配数据分区。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐