用MATLAB比较算法的优劣

《算法导论》第一章《算法在计算中的作用》有一道题目,如下:

1.2-2:假设我们正比较插入排序与归并排序在相同机器上实现。对规模为n的输入,插入排序

运行8n^2步,而归并排序运行64nlgn步。问对哪些n值,插入排序优于归并排序。

解法为:

列方程:8*n^2<=64nlgn

化简: n<=8*lgn    =>  n<=lg(n^8)  =>  10^n<=n^8   => n^8-10^n=>0

可以用matlab画出n^8-10^n=>0的图形

由图形可以判断函数的零点在[-4,4]之间,接下来求解零点。

程序: f=inline(‘n^8-10^n‘);x1=fzero(f,-4),x2=fzero(f,4)

结果:x1 =

-0.795384222885413

x2 =

1.572313792150843

舍去负值,得到正解x=1.572313792150843

再将x取整,即x=1,也n=1,当n值小于等于1时,8*n^2的插入排序比64nlgn的归并排序优良。

总结:本文用matlab对两个算法进行了性能上的比较,提出一种比较算法性能的普世方法。

在学习算法过程中必然会涉及到计算算法复杂度,和对算法的性能分析,而matlab作为一个强大的

数学工具箱,不失为学习算法的一个好工具。

时间: 2024-10-24 02:13:59

用MATLAB比较算法的优劣的相关文章

MATLAB智能算法30个案例分析

<matlab智能算法30个案例分析>采用案例形式,以智能算法为主线,讲解了遗传算法.免疫算法.退火算法.粒子群算法.鱼群算法.蚁群算法和神经网络算法等最常用的智能算法的matlab实现.本书共给出30个案例,每个案例都是一个使用智能算法解决问题的具体实例,所有案例均由理论讲解.案例背景.matlab程序实现和扩展阅读四个部分组成,并配有完整的原创程序,使读者在掌握算法的同时更能快速提高使用算法求解实际问题的能力.本书可作为本科毕业设计.研究生项目设计.博士低年级课题设计参考书籍,同时对广大科

如何评价一个伪随机数生成算法的优劣

以下来自我在知乎的回答.http://www.zhihu.com/question/20222653 谈到随机性,这大概是一个令人困惑哲学问题吧.随机行为精确地说究竟指的是什么,最好是有定量的定义.Kolmogorov曾提出一种判定随机性的方法: 对于无穷的随机数序列,无法用其子序列描述.J.N.Franklin则认为:如果一个序列具有从一个一致同分布的随机变量中独立抽样获得的每个无限序列 都有的性质,则是随机的.这些定义都不是很精确,有时甚至会导致矛盾.可见数学家在谈到这个问题时是多么的审慎.

Matlab 模拟退火算法模型代码

function [best_solution,best_fit,iter] = mySa(solution,a,t0,tf,Markov) % 模拟退化算法 % ===== 输入 ======% % solution 初始解 % a 温度衰减系数 0.99 % t0 初始温度 120 % tf 最终温度 1 % Markov 马尔科夫链长度 10000 % ====== 输出 =====% % best_solution 最优解 % best_fit 最优解目标值 % iter 迭代次数 n

Matlab实现二值图像的腐蚀算法源代码

1.二值图像的腐蚀原理:我们知道,二值图像就是0和1组成的矩阵,0为黑1为白,腐蚀作用在1上面也就是图像高光白色部分,然后白色部分往外收缩.腐蚀就是类似于黑色军队反攻白色军队,最终把自己的黑色领土扩张,黑色字体变粗. 2.Matlab腐蚀算法源代码  q_erode.m %erode 腐蚀 F=[0 1 0 1 0 0; 0 1 1 0 1 0; 0 0 1 0 0 0; 0 0 1 1 0 0; 0 0 0 0 0 0]; S1=[1,0;1,1]; %腐蚀的核 IMG=rgb2gray(im

FCM算法的matlab程序2

FCM算法的matlab程序2 在"FCM算法的matlab程序"这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进行迭代(此方法由于循环较多,时间复杂度相对较高,但更严谨.就时间性而言,推荐使用"FCM算法的matlab程序"这个程序). 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.tx

分类算法中的ROC与PR指标

做过图像识别.机器学习或者信息检索相关研究的人都知道,论文的实验部分都要和别人的算法比一比.可怎么比,人多嘴杂,我说我的方法好,你说你的方法好,各做各的总是不行--没规矩不成方圆.于是慢慢的大家就形成了一种约定,用ROC曲线和PR曲线来衡量算法的优劣.关于ROC曲线和PR曲线的详细介绍可参考资料: ROC Analysis and the ROC Convex Hull Tom Fawcett,An introduction to ROC analysis Jesse Davis,Mark Go

C语言实现粒子群算法(PSO)二

上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*(Pid(k)-Xid(k))+c2*r2*(Pgd(k)-Xid(k))Xid(k+1) = Xid(k) + Vid(k+1) 标红的w即是本次我们要讨论的参数.之前w是不变的(默认取1),而现在w是变化的,w称之为惯性权重,体现的是粒子继承先前速度的能力. 经验表明:一个较大的惯性权重有利于全局

算法 笔记1 时间复杂度计算

评价一个算法的优劣应该从三个方面判断 1.时间复杂度 : 执行算法所耗费的时间,即时间复杂度 2.空间复杂度 : 执行算法所耗费的存储空间,主要是辅助空间 3.可读性和可操作性 : 算法应当易于理解,易于编程,易于调试等 时间复杂度 一般情况下,将算法所要求求解问题的输入量称为问题的规模,并用一个正整数n来表示 T(n)就是该算法的时间耗费,他是该算法所求问题规模n的函数 算法中基本操作重复执行的次数时问题规模n的某个函数f(n) 算法的时间量度记为: T(n) = O(F(n)) 时间复杂度的

数据结构(DataStructure)与算法(Algorithm)、STL应用

catalogue 0. 引论 1. 数据结构的概念 2. 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 2.3.1 二叉树 3. 物理结构实例 3.1 链表 3.1.1 单向线性链表 3.1.2 单向循环链表 3.1.3 双向线性链表 3.1.4 双向循环链表 3.1.5 数组链表 3.1.6 链表数组 3.1.7 二维链表 3.2 顺序存储 4. 算法 4.1 查找算法 4.2 排序算法 0. 引论 0x1: 为什么要学习数据结构 N.沃思(Niklaus  Wirth)教授提