算法
文章平均质量分 71
小松不菜
you made me along the way
展开
-
【leetcode】hot100 哈希表
Leetcode hot100 哈希表原创 2024-06-09 15:25:02 · 573 阅读 · 0 评论 -
【算法】用动态规划求解背包问题
【算法】用动态规划求解背包问题原创 2022-11-20 16:58:22 · 630 阅读 · 0 评论 -
【算法题】快速排序、归并排序、整数二分、浮点数二分
快速排序、归并排序、整数二分、浮点数二分的模版原创 2022-10-22 14:51:59 · 100 阅读 · 0 评论 -
【算法】用动态规划求解最短路径问题
1. 问题描述给定先把图 G(V,E),用动态规划的算法求一条从起点到终点的路径,使这条路径上经过的所 有边的权重之和最小。2. 算法描述2.1 动态规划描述动态规划是一种用来解决一类最优化问题的算法思想,将一个复杂的问题分解成若干个子问 题,通过综合子问题的最优解来得到原问题的最优解。动态规划会将每个求解过的子问题的 解记录下来,这样下一次碰到同样的子问题时,就可以直接使用之前记录的结果。在动态规划中,我们通常使用两种办法来求解:递推的自底向上办法(Bottom-up) 和递归的 自顶向下办法原创 2021-05-20 14:20:09 · 17069 阅读 · 3 评论 -
【算法】最长递增子序列问题
1.问题描述有一个序列 A = [18, 17, 19, 6, 11, 21, 23, 15],求出最长递增子序列的个数。2.算法描述该问题解唯一,但解的形式不唯一。譬如,该问题最长递增子序列的个数为 4,但最长递增 子序列可以有多种情况,比如[18, 19, 21, 23]、[17, 19, 21, 23]、[6, 11, 21, 23]。2.1 枚举法对于这个问题,可以用最原始的方法来枚举每一种情况,每个元素都有取和不取两种选择。 但在此算法中,如果元素有 n 个,那么该算法的时间复杂度将高达原创 2021-05-20 14:04:07 · 699 阅读 · 0 评论 -
【算法】八皇后问题
1. 问题描述在 8 * 8 的国际象棋棋盘上摆放八个皇后,任意两个皇后不能处于同一行、同一列或同一斜 线上,请求出所有的摆法。2. 算法描述用回溯算法来考虑此问题,在放置皇后之前判断该位置是否会产生冲突。有冲突就继续判断 下一个位置,没有冲突就就移到下一行放置。用这种办法,当子节点穷举完发现都没有,回 到原来的节点,选择另一个分支。用这种方法,不重复,不遗漏。 用矩阵来表示皇后摆放的位置,因篇幅有限,我们这里设置 4 * 4 的矩阵来模拟算法。用 4*4 的矩阵来表示棋盘的位置,会占用相当一部分原创 2021-05-18 11:01:24 · 431 阅读 · 0 评论 -
【算法】用哈希表分词统计 Bob Dylan 的歌词
1. 概述鲍勃迪伦是美国的一位伟大的诗人,一个伟大的曲作者,他颇具创造力的作品为美国文化甚 至整个世界的文化做出很多贡献。本文用 NLTK 提取鲍勃迪伦的歌词中的名词,将他的歌词 进行分词统计存储在一个哈希表中,并用 matplotlib 将出现词频率高的歌词进行可视化。2. 问题分析在实验的过程中,我们先从 github 中下载鲍勃迪伦的歌词,再在 python 中将歌词文件读入, 用 NLTK 中的函数将之中的名词提取。在得到所有的名词列表后,使用哈希表来对歌词进行词频统计。用哈希表来存储词原创 2021-05-16 14:11:55 · 379 阅读 · 0 评论 -
【算法】实现稳定的计数排序
1. 问题描述用 python 代码实现一个稳定的计数排序。2. 问题分析计数排序是一个非基于比较的排序算法,他的优势在于对一定范围内的整数排序时。它的复杂度为 O(n+k), 快于任何比较排序算法。2.1 算法模型对于一个数组 A = [2,5,3,0,3,4,0,3], 用数组 C1 存储数组 A 中每个数字出现的次数,用数组 C2存储数组到该下标位置的累加和,来实现其稳定性。2.1 模型说明数组 C2 存储累加和的目的是保证该排序的稳定性。稳定性是指在值相同的情况下,哪个数字先出现就原创 2021-05-16 13:56:13 · 230 阅读 · 0 评论 -
【算法】逆序对数问题
1. 问题描述用改进后的分治算法来实现逆序对数问题,使其时间复杂度为 nlogn。(逆序对数的定义:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对)。2. 问题分析2.1 改进前的方法把数组中间分割成子数组,统计出子数组内部逆序对的数目,再统计出两个相邻子数组之间逆序对的数目。按照这种思路,可以写出下列伪代码:// An highlighted blockdef count _ Inv _ DC _1( A ) : # 统 计 左 边 的 子 数 组 逆原创 2021-05-16 13:49:14 · 785 阅读 · 0 评论 -
【算法】合并排序问题
1. 问题描述复现合并排序问题,用用分治算法来解决这个问题,并分析其时间复杂度。2. 问题分析用分治算法来解决这个问题,以下是分治算法的基本思路:把原问题分解成若干个子问题递归求每一个子问题的解合并子问题的解在合并排序中:输入: 给定的n 个元素的序列A输出为:A[0] <= A[1] <= A[2] <=…<= A[n-1]用分治算法的思路来考虑此问题:1.我们的目标是把乱序的数组A 变成有序的sorted A,将问题分解,把A 沿中间切分2.这样问题原创 2021-05-15 12:02:57 · 637 阅读 · 0 评论 -
【算法】子集和问题
1. 问题描述给定一个集合 W= {-7, -3, -2, 5, 8},是否存在 W 的一个子集 I,使 I 子集中的元素相加等于 0,若存在,求出所有的子集。2. 算法阐述该问题需要使用暴力求解的办法,即穷举给定集合的所有子集,并验证他们的累加和是否等于 0.假设 A = {a,b,c},穷举其所有的子集:{a}, {b}, {c} {a, b}, {a, c}, {b, c} {a, b, c}当集合中元素个数为 n 时,其所有子集的个数为 2的n次方-1,用 0,1 编码来表示所有原创 2021-05-15 11:20:57 · 1711 阅读 · 0 评论 -
【算法】遍历查找和二分查找的时间复杂度比较分析
摘要本报告介绍了了遍历查找和二分查找两种算法,并用 python 语言将其实现。通过对要查找的数组的大小的变化控制,用 matplotlib 库函数绘制出了两种算法分别的时间复杂度的图像,并进行数据分析和比较。关键词: 遍历查找;二分查找;时间复杂度1. 引言遍历查找是通过从头到尾遍历一个数组,查找数组中是否有所要查找的数。二分查找是在一个有序的数组中,把要查找的数和数组最中间位置的数比较,按照这种逻辑在数组中找到要查找的数字。通过描述可知二分查找的效率是要比遍历查找高的,下面的实验通过时间复杂原创 2021-05-15 11:12:56 · 2356 阅读 · 0 评论 -
【算法】 通过苏格拉底麦穗理论(最优停时)来研究爱情
摘要 本篇文章通过最优停时理论,用苏格拉底捡麦穗的实例,建立模型。分析在怎么样的采样容量下, 苏格拉底捡到最长的麦穗的情况的可能性是最高的, 并给出概率的具体数值。 本篇文章首先从数学理论角度证明最优的采样空间概率,再通过计算机代码实验证明最优停止理论的正确性,从而 给出一个较优的采样方法,同样可以运用于爱情问题等其他现实生活问题中。关键词: 最优原创 2021-02-03 19:16:22 · 6034 阅读 · 13 评论