算法
文章平均质量分 88
轩轩曲觞阁
C/C++在学新人
展开
-
算法——BFS算法
BFS(广度优先搜索,Breadth-First Search)算法是一种用于图和树等数据结构中进行搜索的基本算法。它从指定的起始节点开始,逐层地向外扩展搜索,直到找到目标节点或遍历完整个图。BFS算法的基本思想是:先访问起始节点,然后依次访问起始节点的邻居节点,再依次访问邻居节点的邻居节点,以此类推,直到搜索到目标节点或者遍历完整个图。BFS算法使用队列来辅助实现节点的遍历顺序,保证每一层的节点按顺序访问。原创 2024-04-22 09:27:45 · 435 阅读 · 1 评论 -
算法——递归与搜索算法
官方一点来说递归指的是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。通俗一点来说,递归就是一个函数自己调用自己的过程。原创 2024-02-04 20:30:40 · 1054 阅读 · 0 评论 -
算法——动态规划
动态规划(Dynamic Programming)是一种解决多阶段决策问题的优化方法。它通常用于解决具有重叠子问题和最优子结构性质的问题,能够将一个大问题分解为多个重叠的子问题,并通过存储子问题的解来避免重复计算,从而提高算法效率。原创 2024-03-05 15:18:59 · 1050 阅读 · 0 评论 -
算法——分治
分治算法是一种将一个大问题分解成若干个相似而独立的子问题来求解的算法设计策略。通过递归地将问题分解为更小的子问题,然后将子问题的解合并起来,最终得到原始问题的解。原创 2024-03-04 14:51:08 · 910 阅读 · 0 评论 -
算法——双指针
双指针算法是一种常用于解决数组或链表中的问题的技巧。它涉及使用两个指针(索引或引用),通常分别称为“快指针”和“慢指针”或“左指针”和“右指针”,以协同进行遍历或搜索。该算法的核心思想是通过移动这两个指针来实现特定的目标,例如寻找一对元素的和、判断是否存在某种关系或在特定条件下移动其中一个指针。双指针算法通常能够在O(n)的时间复杂度内解决问题,具有较好的效率。原创 2024-02-27 15:08:53 · 915 阅读 · 0 评论 -
算法——滑动窗口
滑动窗口算法是一种解决数组或列表中子数组或子序列问题的有效方法。该算法通过定义一个窗口,然后在数据结构上滑动该窗口,逐步处理数据,以解决特定类型的问题。其基本思想是维护一个窗口,初始时窗口覆盖数组中的一部分元素,然后通过滑动窗口来依次处理每个子数组。在每次窗口滑动时,可以通过添加新元素和删除旧元素来更新窗口的内容,以在O(1)时间内完成操作。原创 2024-02-26 09:38:36 · 900 阅读 · 0 评论 -
算法——模拟
官方一点来说模拟算法(Simulation Algorithm)是一种通过模拟现实或抽象系统的运行过程来研究、分析或解决问题的方法。它通常涉及创建一个模型,模拟系统中的各种事件和过程,以便观察系统的行为,收集数据并得出结论。这类算法适用于复杂的系统,其中涉及许多相互作用的元素和随时间变化的状态。通俗来说我们只需要对照题目,提取出对应的流程,将这个流程转换成代码。需要注意的是, 我们要在草稿纸上过一遍流程,不然很容易出问题。原创 2024-02-22 23:15:57 · 480 阅读 · 0 评论 -
算法——位运算
位运算符是在二进制位级别上对数据进行操作的运算符。原创 2024-02-19 22:05:39 · 986 阅读 · 0 评论 -
算法——前缀和算法
前缀和算法(Prefix Sum)是一种用于快速计算数组元素之和的技术。它通过预先计算数组中每个位置前所有元素的累加和,将这些部分和存储在一个新的数组中,从而在需要计算某个区间的和时,可以通过简单的减法操作得到结果,而不必重新遍历整个区间。原创 2024-02-07 22:32:36 · 832 阅读 · 0 评论 -
算法——二分查找算法
简单来说,"二分"指的是将查找的区间一分为二,通过比较目标值与中间元素的大小关系,确定目标值可能在哪一半区间内,从而缩小查找范围。这个过程不断重复,每次都将当前区间二分,直到找到目标值或确定目标值不存在为止。这种分而治之的策略使得二分查找算法具有较高的效率,时间复杂度为O(log n)。大致图解如下即通过二段性,在每次判断过后可以一次性减少将近一半的数据,然后通过不断的挪移左右区间来筛选出最后的结果。原创 2024-02-05 21:48:35 · 1153 阅读 · 0 评论 -
数据结构——哈希
在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),搜索的效率取决于搜索过程中元素的比较次数。那么我们理想的搜索方法是:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:1. 插入元素。原创 2023-10-19 15:28:09 · 239 阅读 · 0 评论 -
算法——各排序算法效率对比和总结
对于排序我们有如下的导图且一谈到排序,我们都有下图。原创 2023-05-21 14:17:23 · 838 阅读 · 0 评论 -
算法——归并排序和计数排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。图示如下。原创 2023-05-20 13:46:20 · 595 阅读 · 0 评论 -
算法——冒泡排序与快速排序
1.冒泡排序是一种非常容易理解的排序2.时间复杂度:O(N^2)3.空间复杂度:O(1)4.稳定性:稳定1.快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序2.时间复杂度:O(N*logN)3.空间复杂度:O(logN)4.稳定性:不稳定。原创 2023-05-09 11:27:19 · 162 阅读 · 0 评论 -
算法——选择排序与堆排序
1.选择排序思考非常好理解,但是效率不是很好。实际中很少使用2.时间复杂度:O(N^2)3.空间复杂度:O(1)4.稳定性:不稳定1.堆排序使用堆来选数,效率就高了很多。2.时间复杂度:O(N*logN)3.空间复杂度:O(1)4.稳定性:不稳定。原创 2023-05-05 20:44:07 · 85 阅读 · 0 评论 -
算法——插入排序与希尔排序
1.元素集合越接近有序,直接插入排序算法的时间效率越高2.时间复杂度:O(N^2)3.空间复杂度:O(1),它是一种稳定的排序算法4.稳定性:稳定希尔排序的特性总结:1. 希尔排序是对直接插入排序的优化。2.当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。3.希尔排序的时间复杂度不好计算,因为。原创 2023-05-05 16:31:24 · 65 阅读 · 0 评论