算法分析与设计
文章平均质量分 64
SnailCpp
这个作者很懒,什么都没留下…
展开
-
动态规划-矩阵链乘法(1)
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…,n-1。考察这n个矩阵的连乘积A1A2…An。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序,这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,则可以依此次序反复调用2个矩阵相乘的标准算法(有改进的方法,这里不考虑)计算出矩阵连乘积。若A是一个p×q矩阵,B是一个q×r矩阵,转载 2016-12-03 17:20:12 · 628 阅读 · 0 评论 -
分数化小数
1、问题描述 输入 正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b <= 10^6, c<=100。输入包含多组数据,结束标记为a=b=c=0。 样例输入: 1 6 4 0 0 0 样例输出: Case 1:0.1667 2、解决思路 模拟整数除法,反复地进行 求商 和 求余数 ...原创 2018-07-28 22:31:08 · 225 阅读 · 0 评论 -
排序-堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。算法描述 ①建堆,建...原创 2018-04-18 21:08:40 · 212 阅读 · 0 评论 -
二叉树的最大深度和最小深度
转载:https://blog.csdn.net/xiongqiaochu/article/details/70313031二叉树的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL...转载 2018-04-22 18:12:18 · 714 阅读 · 0 评论 -
二叉树的层次遍历
一、给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? Yes样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果:[ [3], [9,20], [15,7] ]解题思路:1、用队列保存遍历的结点2、创建一维vector用于保存每层的结点值3、将每个一维vect...原创 2018-04-22 17:54:56 · 470 阅读 · 0 评论 -
搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。您在真实的面试中是否遇到过这个题? Yes样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true思路:首先选取数组中右上角的数字。如果该...原创 2018-04-22 17:02:59 · 514 阅读 · 0 评论 -
排序-归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。算法描述把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列...原创 2018-04-18 12:37:40 · 342 阅读 · 0 评论 -
在二叉树中寻找值最大的节点并返回
题目:在二叉树中寻找值最大的节点并返回。样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值为 3 的节点。解题思路:1、将初始最大值设置为root。 2、采用层序遍历。访问二叉树是从上到下,从左往右依次访问(FIFO)。3、每次访问一个结点,就把当前结点与原最大值结点进行比较。若当前结点的值大于原最大值结点的值,则...原创 2018-04-22 09:05:35 · 5665 阅读 · 0 评论 -
排序-希尔排序
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文...原创 2018-04-18 00:10:21 · 165 阅读 · 0 评论 -
排序-插入排序
插入排序的思想:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原...原创 2018-04-17 23:33:53 · 156 阅读 · 0 评论 -
排序-冒泡排序
冒泡排序基于比较的的简单排序算法。它的基本原理:通过相邻元素的两两比较,如果第一个元素比第二个元素大,则交换它们,排序这样将最大(最小)元素放到无序数据的末尾,若无数据交换,则实现数据全部有序。算法描述:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一...原创 2018-04-17 21:58:45 · 313 阅读 · 0 评论 -
排序-选择排序
选择排序是一种基于比较的简单排序(不稳定)。 它的基本原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法描述:初始状态:无序区为R[1..n],有序区为空;第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n...原创 2018-04-17 21:45:53 · 208 阅读 · 0 评论 -
动态规划-矩阵链乘法(2)
前言:今天接着学习动态规划算法,学习如何用动态规划来分析解决矩阵链乘问题。首先回顾一下矩阵乘法运算法,并给出C++语言实现过程。然后采用动态规划算法分析矩阵链乘问题并给出C语言实现过程。 1、矩阵乘法 从定义可以看出:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×r的矩阵A左乘一个r×n的矩阵B,会得到一个m×n的矩阵C。在计算机中,一个矩阵说穿了就是一个二维转载 2016-12-04 14:42:55 · 530 阅读 · 0 评论 -
纵横字谜的答案 (UVa232)
纵横字谜的答案 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Description Crossword Answers A crossword puzzle consists of a rectangular grid of black and...原创 2018-07-29 21:21:35 · 459 阅读 · 0 评论