随笔分类 - 算法和数据结构
经典算法、浅显分析学习
摘要:开篇在实际的过程中,总需要对一些数据进行排序,在众多的排序算法中,快速排序是较为常用的排序算法之一。而网上对于快速排序的中文资料还不是很全。写这篇博文主要记录一些自己对于快速排序的了解,以及对快速排序的性能的分析。我将在这里记录下我对快速排序的认识和学习过程 ,用尽可能简单明了的叙述来阐述我的理解。快速排序基于算法中很重要的思想是 分治。所以会先介绍一下分治思想,然后对算法原理进行介绍,接着会分析算法的性能并对算法作进一步的讨论。注:为了便于说明问题,本博文中会用到部分《introduction to algorithm》中的图片。关键词:快速排序、分治、递归“大事化小”——从分治说起分治?分
阅读全文
摘要:图是一种常见的数据结构,深度优先和广度优先搜索都是常用的算法,这篇博文先介绍深度优先搜索。和往常一样的,我会用朴实的语言来介绍它,所以只要认真看一定能理解。开始会先介绍下图的表示方法,如果已经掌握了大可跳过。图的表示要表示一个图G(V,E)有两种常见的表示方法,邻接矩阵和邻接表。这两种方法可用于有向图和无向图。对于稀疏图,常用邻接表表示,它占用的空间|E|要小于|V|*|V|。邻接表:图G(V,E)的邻接表表示由一个包含V列表的数组Adj组成,其中的每个列表对应于V中的一个顶点,对于v中的任意一个点u,灵界表Adj[u]包含所有满足条件(u,v)属于E的点v,也就是Adj[u]中包含所有和u相
阅读全文
摘要:前言背包问题是一个经典的算法问题,可以用动态规划,贪心法,分支界限法等方法解决问题描述:有n个物品,编号1,2,3,、、n,其中第 i 个物品重量为Wi 价值 Vi ,有一个容量为W的背包。在容量允许范围内,如何选择物品,可以得到最大的价值。(为了简单起见,假设物品的重量 Wi 和价值Vi 都是正数)根据取物品的方式,背包问题又可以被分为三类:0/1背包问题(0-1 knapsack problem)这也是最常见的背包问题,对于每个物品,要么取走要么不取走,每个物品只能取一次。可以用数学表达式表示为:maximize subject to其中xi只能为1 或者0 所以称为背包问题有界限的背包问
阅读全文
摘要:初衷这个学期开了算法课,要几个关键算法思想的代码实现。当时感觉学的还可以了,也做了认真的笔记。真正写代码的时候发现还是没有完全掌握。网上关于这方面的资料也零零散散不是很全,致使走了不少弯路。今晚上实验成功验收了,感觉自己也收获不小遂决定把算法实现的详细思路记录下来,一是自己坐下总结、另外也希望给当时想我一样找资料、搞算法的同学一些帮助。这中间我会尽最大可能的把问题描述清楚。这篇博文主要写的是n皇后问题、后续还会加上背包问题(动态规划和分支界限)、旅行商问题等等。写在前面不管什么问题、都是可以抽象的,对于任何问题,你总是可以找到几个point,它们对问题全局有着决定性的作用,弄清楚看他们之间的内
阅读全文
摘要:初衷:最近在看算法相关的东西,看到贪心法解决mst的问题,可惜树上讲解的不是很清新,到网上找了很多资料讲解的也不透彻只是随便带过就草草了事、这几天抽空看了下,总算基本思路理清楚了主要还是得感谢强大的google,帮我找到一个很好的英文资料。(下面有链接,有兴趣的同学可以看看)理顺了思路,就和大家分享下~希望对学习贪心法的同学会有所帮助。这篇博客的主要内容是贪心法求解Minimum Spanning Tree (MST)(最小生成树)的问题贪心法求解最小生成树常用的有两种算法,分别是Prim’s MST algorithm和Kruskal's MST algorithm(prim算法和k
阅读全文
摘要:当然、这是一个经典的递归问题~ 想必来看这篇博文的同学对汉诺塔应该不会陌生了吧, 写这篇博还是有初衷的: 之前学数据结构的时候自己看书、也上网上查了很多资料,资料都比较散、而且描述的不是很清楚,对于当时刚刚接触算法的我,要完全理解还是有一定难度。今天刚好有时间就整理了下思路、重写分析了一下之前的疑惑的地方、没有透彻的地方便都豁然开朗了。所以迫不及待把我的想法记录下来,和大家分享。 如果你也是和之前的我一样对hanoi tower没能完全消化,或者刚刚接触汉诺塔,那希望我的这种理解方式能给你些许帮助,如果你觉得已经完全掌握的比较牢靠了,那也可以看看,有好的idea可以一起分享;毕竟交...
阅读全文
摘要:动态规划博大精深,想完全掌握是很难的,不过我们可以从一些简单的例子之中去体会她的奥妙。不说废话、先来一个简单的例子吧:longest path in DAGProblem: Given a weighted directed acyclic graph G=(V, E), an vertex v, where each edge is assigned an integer weight, find a longest path in graph G问题描述:给一个带权有向无环图G=(V,E),找出这个图里的最长路径。说实话初学者直接给出这个图会看蒙的、再看看问题,不知道从何下手。好了,对上图
阅读全文
摘要:之前也在看算法相关的书、在被称为黑书的《算法导论》里看过关于动态规划的讲解只是当时研究不深、最近突来兴趣对动态规划做了个小的总结、所以就分享下不足之处多多指正、先对动态规划做一个简单的介绍吧:动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。动态规划是信息学竞赛中选手
阅读全文