算法设计与分析
文章平均质量分 61
vandance
这个作者很懒,什么都没留下…
展开
-
算法设计与分析——分治术与递归(一)
一. 定义直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。...原创 2018-09-10 20:35:29 · 1351 阅读 · 0 评论 -
算法设计与分析——动态规划
这几天在leetcode上刷了不少动态规划的题,在这里来总结一下。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到更加快速的解法。一. 动态规划的...原创 2018-09-15 11:43:01 · 560 阅读 · 0 评论 -
算法设计与分析——分治术与递归(二)
一. 分治策略将要求解的较大规模的问题分割成若干个更小规模的子问题。对这若干个子问题进行求解。如果子问题的规模仍然不够小,那么再继续划分。将子问题的解合并为更大规模的解,自底向上求出原来问题的解。二. 分治法的适用条件该问题的规模缩小到一定程度就可以比较容易地解决。该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。利用该问题分解出的子问题的解可以合并为该...原创 2018-09-26 20:47:59 · 320 阅读 · 0 评论 -
二分搜索技术
二分搜索技术给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。分析:该问题的规模缩小到一定程度就可以容易地解决。而且该问题满足分治法的适用条件:该问题可以分解为若干个规模较小的相同问题;分解出的子问题的解可以合并为原问题的解;分解出的各个子问题是相互独立的。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素...原创 2018-09-26 21:12:06 · 1187 阅读 · 0 评论 -
排序算法
学过数据结构的都知道,排序有内部排序和外部排序之分,本文我们主要关注的是内部排序算法。常见的排序算法如下图所示:排序算法可以分成以下几种:交换排序、插入排序、选择排序和归并排序。其中,冒泡排序和快速排序属于交换排序,插入排序和希尔排序属于插入排序,简单选择排序和堆排序属于选择排序,二路归并排序和多路归并排序属于归并排序。本文主要介绍这几种方法及其实现。冒泡排序冒泡排序(Bubble So...原创 2018-09-27 15:21:45 · 205 阅读 · 0 评论 -
线性时间选择
问题:给定线性序集中n个元素和一个整数k,1<=k<=n,要求找出这n个元素中第k小的元素。我们采用快速排序的思想来解决这个问题。首先我们要找到基准的位置,如果基准的位置小于k,则表示第k小的元素在基准的后面,否则在基准的前面。如果能在线性时间内找到一个划分基准,使得按这个基准所划分出的2个子数组的长度都至少为原数组长度的 ε 倍(0<ε<1是某个常数),那么就可以在最...原创 2018-09-28 11:49:55 · 3634 阅读 · 1 评论 -
大整数乘法
设计一个有效的算法,可以计算两个n位大整数的乘法运算。如果按照我们日常的计算方法,应该就是将两个数逐位相乘,最后加起来得到最终的结果。由于是大整数乘法,那么我们用string来存储这两个数,因为是要做乘法,我们要从两个数的最低位开始乘,并且难免会有进位,所以我们打算翻转这两个string,使得更好操作一下。string multiply(string num1,string num2){ ...原创 2018-09-29 15:00:48 · 14138 阅读 · 1 评论 -
矩阵连乘问题
一.定义完全加括号的矩阵连乘积可递归定义为:(1) 单个矩阵是完全加括号的;(2) 矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)例如,有四个矩阵ABCD相乘,那么所有的完全加括号结果为(A((BC)D)) (A(B(CD))) ((AB)(CD)) (((AB)C)D) (A(BC))D)如果一个矩阵的连乘...原创 2018-10-15 20:44:42 · 1989 阅读 · 0 评论 -
输出矩阵连乘所有的完全加括号形式
例如说,有四个矩阵ABCD相乘,那么所有的完全加括号结果为(A((BC)D)) (A(B(CD))) ((AB)(CD)) (((AB)C)D) (A(BC))D)。要求输出n个矩阵连乘所有的完全加括号结果。解决方法一基本思想:首先从1,2,3,4个矩阵的角度来归纳。如果只有一个矩阵A,那么很明显所有的完全加括号结果就是A本身。如果有两个矩阵A,B相乘,很明显所有的完全加括号结果就是AB。...原创 2018-10-15 21:15:49 · 5732 阅读 · 1 评论