玉古路38号
相信自己,一往无前。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】十大排序算法原理分析与C++实现
对于排序算法,不但要知道其是如何实现的,同时也要知道它是怎么来的,应该在什么样的情况下使用,时间复杂度和空间复杂度以及优缺点。 0.前言 对于常见的排序算法的运行时间,总结如下表。其中,n表示要排序的数据项数量。对于计数排序,数据项均在集合{0,1, ..., k}内。对于基数排序,每个数据项都是d位数字的整数,每位数字可能取k个值。对于桶排序,假定关键字是半开区间[0, 1)内服从均匀分布的n个实数。表的最右一列给出了平均情况或期望运行时间,可能与最坏运行时间不同。再次不对堆排序的平均运行时间进...原创 2021-05-27 22:39:00 · 383 阅读 · 0 评论 -
【数据结构】树状数组(Binary index tree,BiT)
文本:https://zhuanlan.zhihu.com/p/93795692 视频:https://www.bilibili.com/video/BV1pE41197Qj?from=search&seid=12104701230398103081原创 2021-05-13 22:58:14 · 288 阅读 · 0 评论 -
【算法】深入理解动态规划
动态规划(Dynamic Programming)技术广泛应用于组合优化问题的算法设计中,比如图的多起点与多终点的最短路径问题、矩阵链的乘法问题、最大效益投资问题、背包问题、最长公共子序列问题、图像压缩问题、最大子段和问题、最优二分检索树、RNA的最优二级结构问题等。 ...原创 2021-05-13 22:53:25 · 213 阅读 · 0 评论 -
【算法】C++ 二叉树的深度优先搜索与广度优先搜索(前序遍历搜索、中序遍历搜索、后序遍历搜索)的递归与迭代实现
目录 1. 深度优先搜索 1.1 前序遍历 1.1.1 递归法 1.1.2 迭代法 1.2 中序遍历 1.2.1 递归法 1.2.2 迭代法 1.3 后序遍历 1.3.1 递归法 1.3.2 迭代法 2. 广度优先搜索 2.1 递归法 2.2迭代法 1. 深度优先搜索 1.1 前序遍历 1.1.1 递归法 1.1.2 迭代法 1.2 中序遍历 1.2.1 递归法 1.2.2 迭代法 1.3 后序遍历 1.3.1 递归法 1.3.2 迭代法 2. 广度优..原创 2021-04-09 23:05:34 · 374 阅读 · 0 评论 -
【算法】动态规划——将问题转化为小问题
1 背包问题 假设你是个小偷,背着一个可装4磅重东西的背包。你可以盗窃的商品有如下三件。为了让盗窃的撒谎给你品价值最高,你该选择哪些商品? 1.1 简单算法 最简单的算法如下:尝试各种可能的商品组合,并找出价值最高的组合。 这样可行,但速度非常慢。在有3件商品的情况下,你需要计算8个不同的集合;有4件商品时,你需要计算16个集合。每增加一件商品,需要计算的集合数都将 !这种算法的运行时间为O(2ⁿ),真的是慢如蜗牛。 只要商品数量多到一定的程度,这种算法就行不通。当然,我们可以...原创 2021-03-16 14:18:34 · 640 阅读 · 1 评论 -
【算法】贪婪算法——每步都是最优解
1.教室调度问题 假设有如下课程表,你希望将尽可能多的课程安排在某间教室上课。但是没有办法让这些课都在这间教室上,因为有些课的上课时间有冲突。 你希望在这间教室上尽可能多的课。如何选出尽可能多且之间不冲突的课程呢? 这个问题好像很难,实际上,算法可能简单得让你大吃一惊。具体做法如下: ...原创 2021-03-04 10:16:48 · 1553 阅读 · 1 评论 -
【算法】狄克斯特拉算法——加权图的最短路径问题
1. 前言 前面,我们讲过非加权图的最短路径问题,它是借助队列进行广度优先搜索实现的(链接在此)。广度优先搜索算法可以很好地解决如下非权重图的最短路径问题。 这是最短路径原创 2021-03-03 15:08:02 · 1136 阅读 · 1 评论 -
【算法】欧几里德算法——求两个整数的最大公约数
目录 1. 算法简介 2. 算法实现 2.1 暴力穷举法 2.2 欧几里德算法 1. 算法简介 欧几里德(Euclidean)算法,又被称辗转相除法,是求最大公约数的算法。 两个数的最大公约数是指能同时整除它们的最大正整数。欧几里德算法的基本原理是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。例如: 252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5); 252 − 105 = 147,所以147和105的最大公约数也是21; 147原创 2020-11-10 17:03:14 · 3245 阅读 · 0 评论 -
【算法】深度理解 递归算法
1. 什么是递归? 下面先描述一个递归可能应用的实际场景: 我们有一个神秘的盒子,有一把钥匙在这个盒子里。 这个盒子 里有盒子,而盒子里面又有盒子。钥匙可能就在某一个盒子中。为了找到钥匙,有两种解决思路。 下面是第一种解决方式: 创建一个要查找的盒子堆; 从盒子堆取出一个盒子,在里面找; 如果找到的是盒子,则将盒子加入盒子堆中,以便以后再查找; 如果找到钥匙,则大功告成! 回到第二步。 另一种解决方法则更为清晰: 检查盒子中的每样东西; 如果是盒子,就回到第一步; ...原创 2020-11-09 22:33:55 · 583 阅读 · 0 评论 -
【算法】排序算法——选择排序、快速排序、合并排序
1. 选择排序 假设你的计算机内存储了很多歌曲,每首歌曲都记录了播放次数。 需要将这个列表按照播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。一种办法是遍历这个列表,找出作品播放次数最多的乐队,并将该乐队添加到一个新列表中。 再次这样做,找出播放次数第二多的乐队。 继续这样做,最后得到一个有序的列表。 下面来看看这样做需要多久时间。O(n)意味着查看列表中的每个元素一次。例如,对乐队列表进行简单查找时,意味着每个乐队查看一次。要找出播放次数最多的乐队,必须检查列表中的每...原创 2020-11-08 22:25:56 · 821 阅读 · 0 评论 -
【算法】旅行商问题——运行时间为O(n!)的算法
旅行商问题是一个运行时间极长的算法。这个算法是计算机科学领域非常著名的旅行商问题,其时间增长得非常快,而且即使非常聪明的人也没有改进空间。 旅行商问题是这样的:有一个旅行家,他需要前往5个城市。这位旅行商要前往5个城市,同时要确保旅程最短。为此,可考虑前往这些城市的各种可能顺序。 对于每种顺序,他都计算总旅程,再挑出旅程最短的路线。5个城市有120种不同的排列方式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市时,需要执行720次操作(有720种不同的排列方式)。涉及7个城.原创 2020-11-08 20:45:13 · 785 阅读 · 0 评论 -
【算法】时间复杂度/运行时间——大O表示法
对于所有算法,我们都要讨论其运行时间。一般而言,应该选择效率最高的算法,以最大程度地减少运行时间或占用空间。 大O表示法是一种特殊的表示法,指出了算法的速度有多快。大O表示法 并不能表示具体算法任务运行的时间,这也没有意义,因为任务量总是在变。我们需要知道运行时间如何随任务量增长而增长,这正是大O法的用武之地。大O法表示指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间表示为O(n)。并没有时间单位s,这是因为大O法指的并非以秒为单.原创 2020-11-06 15:02:20 · 2390 阅读 · 0 评论
分享