随笔分类 - Algorithm
摘要:在学习矩阵链乘之前,先要知道矩阵之间是如何进行乘法运算的,如果你对这个还不是很了解,那么先去看一下线性代数中矩阵的乘法这一节!OK,我们来说矩阵链乘,这是动态规划算法中的一个基础问题,在算法导论15章中也详细介绍了此算法,本文也是主要参考算法导论。我们来看一下问题: 给你N个矩阵,{A1,A2,A3,A4,......,AN},这一组矩阵必须是可以相乘的,我们要计算这N个矩阵的乘积,即:A1A2A3..AN。 因为我们的矩阵是满足结合律的,所以我们可以在计算矩阵链乘的时候可以有许多不同的计算次序。 在这里,以不同的次序做乘法,其乘法的运算次数是不同的。来举个例子:我们来对{A1,A2,A3..
阅读全文
摘要:动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。类似于分治策略。他是运筹学的一个分支,是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。动态规划算法对每个子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。动态规划算法的设计分为四个步骤:1、描述最优解的结构。2、递归定义最优解的值。3、按自底向上的方式计算最优解的值。4、由计算出的最优解的值来构造一个最优解。动态规划一般可分为线性动规,区域动规,树形动规,背包动规四类。 其中比较著名的有最短路径问题,背包问题,项目管理,网络流优化等。来看一下举例
阅读全文
摘要:归并排序是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。这是采用分治算法的一个典型的应用!这里要讲两种:两路归并排序,归并排序~!归并排序是一种稳定的排序算法;他用顺序存储结构。也易于在链表上实现。算法复杂度: 比较操作的次数介于和。赋值操作的次数是。最优时间复杂度O(n),最差时间复杂度O(nlogn),平均时间复杂度O(nlogn)。 归并算法的空间复杂度为:Θ (n)归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选
阅读全文
摘要:选择排序的基本思想是:每一趟从待排序的数据中选出最小元素,顺序放在已排好序的数据最后,直到全部数据排序完毕。选择排序包括:简单选择排序,堆排序~!一、简单选择排序简单选择排序时一种不稳定的算法,他的时间复杂度是:O(n^2),空间复杂度就需要一个中间单元A【0】的空间!来根据图看一下排序的过程!根据图大家应该能看出来,算法的思想是:对于这一组数据,如上面的待排序的数据{K1,K2,…,Kn},首先从数据中寻找最小值,我们假定是Kn , 那么我们要把Kn和K1来交换,就是把最小值移动到最前面,然后从除K1外的剩下的元素去寻找另一个最小值,然后和K2交换,就这样依次类推,直到元素的最后!OK,来看
阅读全文
摘要:作者:jofranks原创作品,转载请标明出处!版权所有,侵权必究!来源:http://blog.csdn.net/jofranks交换排序的基本思想是:两两比较待排序的数据,发现两个数据的次序相反则进行交换,直到没有反序的数据为止。本文交换排序有:冒泡排序,快速排序~!一、冒泡排序冒泡排序是一种稳定的排序算法,他的时间复杂度是O(n^2) 当然,当数据基本有序的时候,他可以达到线性复杂度!OK,发一个冒泡排序的动画演示:冒泡排序动画演示他的算法基本思想是:最多进行n-1趟排序,每趟排序时,从底部向上扫描,一旦发现两个相邻的元素不符合规则,则交换。我们发现,第一趟排序后,最小值在A[1],第二
阅读全文
摘要:作者:jofranks原创作品,转载请标明出处!版权所有,侵权必究!来源:http://blog.csdn.net/jofranks插入排序包括:直接插入排序,折半插入排序,希尔排序~!OK,下面我们就来逐个讲解!一、直接插入排序直接插入排序属于稳定的排序,时间复杂性为O(n^2),空间复杂度为O(1)。它的基本思想是: 假设待排序数据存放在数组A[1..n]中,则A[1]可看作是一个有序序列,让i从2开始,依次将A[i]插入到有序序列A[1..i-1]中,A[n]插入完毕则整个过程结束,A[1..n]成为有序序列。OK,现在我们来看一下排序的过程:待排序数据: 【25】 548 54 21.
阅读全文
摘要:作者:jofranks原创作品,转载请标明出处!版权所有,侵权必究!来源:http://blog.csdn.net/jofranks啊哈!算法ok我们开始,我学习东西比较喜欢对比着来学习,记得以前学习历史的时候我就是这样,将知识点通过每一个线路联系起来,列成一个表或者线路图来记忆。学习算法也来这样,但是要知道,学习的时候我们还必须要不断的去练习!一、时间复杂度O(n^2): 冒泡排序、选择排序、插入排序、交换排序;O(nlog2n):其他非线性的排序算法(如:快速排序,归并排序,shell排序,堆排序);O(n): 线性排序算法;二、空间复杂度O(n):二路归并排序、基数排序、线性...
阅读全文