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