算法
lhsgbc
这个作者很懒,什么都没留下…
展开
-
dynamic programming动态规划初步理解【-1】
之前也在看算法相关的书、在被称为黑书的《算法导论》里看过关于动态规划的讲解 只是当时研究不深、最近突来兴趣对动态规划做了个小的总结、所以就分享下 不足之处多多指正、 先对动态规划做一个简单的介绍吧: 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数 学家R转载 2012-02-13 23:15:40 · 265 阅读 · 0 评论 -
深度优先和广度优先
深度优先------> 栈。 广度优先------->队列。原创 2012-02-28 16:06:48 · 241 阅读 · 0 评论 -
P问题、NP问题、NPC问题、NP难问题的概念[zz]
你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接转载 2012-02-26 13:33:43 · 170 阅读 · 0 评论 -
统计函数运算时间
long start,stop; time(&start);/**//*记录开始时间*/fun1();time(&stop);/**//*记录结束时间*/cout"共花时间:"int(stop-start))"\n";转载 2012-02-17 22:00:33 · 160 阅读 · 0 评论 -
随机数的生成
问题描述: 现要求产生 0~n-1 范围内的 m 个随机整数的有序列表,且不允许重复,m 考虑到 n 的值可能很大,而通常 C/C++ 提供的随机数产生器所能返回的随机数在 [0,RAND_MAX],其中,RAND_MAX 为 0x7FFF。也就是说只有 15 位的随机性。因此,我们需要要有自己的随机数产生器,以便能够返回更多位数的随机数,通常为 30 位。下转载 2012-02-17 20:45:40 · 122 阅读 · 0 评论 -
位向量和排序
对于排序问题,想必大家都非常熟悉。而且,应该都知道基于比较的排序方法的时间复杂度的下界是 O(n*logn)。尽管又出现了基数排序,使得排序类算法的时间复杂度改进到 O(d*n),但是基数排序方法实现起来还是比较麻烦的。下面这种排序方法的时间复杂度可以认为是 O(n),但是和基数排序方法相比,它的实现非常简单。 为了介绍这种方法,需要对输入数据作如下假定:(1)都是非负整数,(2)转载 2012-02-17 19:41:36 · 149 阅读 · 0 评论 -
线性排序算法
前言 插入,快速,合并,堆排序等基于比较的排序算法的最坏情况下界为Ω(nlogn),最坏情况下都要进行Ω(nlogn)次比较。假设有一n个元素组成的数组(假设每个元素都不相等),那么一共有n!排列组合,而且这n!排列组合结果都应该在决策树的叶子节点上(如图1),在图1中n = 3,所以有3! = 6种组合全都在决策树的叶子节点,对于高度为h的二叉树,叶子节点的个数最多为2h (当为满二叉树时为转载 2012-02-15 17:32:32 · 1835 阅读 · 0 评论 -
快速排序及其分析
前言 快速排序的平均情况下是O(nlogn),但是一般都比其他运行时间为O(nlogn)的算法都要快,因为它隐藏的常数因子比较小,但是在最坏情况之下,快速排序的运行时间是O(n2)。 快速排序过程 快速排序采用的思想是分治思想,就像合并排序算法的思想一样,合并排序算法是从数组的中间开始分治,直到分为N个分组,最后分别合并N个分组的解。如下图,有原始数组A = {1, 3, 4, 5, 7,转载 2012-02-15 17:29:26 · 180 阅读 · 0 评论 -
堆排序及其分析
前言 记得在学习数据结构的时候一味的想用代码实现算法,重视的是写出来的代码有一个正确的输入,然后有一个正确的输出,那么就很满足了。从网上看了许多的代码,看了之后貌似懂了,自己写完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次写出正确的代码,也许在第一次写的时候是因为参考了别人的代码,看过之后大脑可以进行短暂的高清晰记忆,于是欺骗了我,以为转载 2012-02-15 17:12:46 · 111 阅读 · 0 评论 -
最大子序列问题及其求解----C 语言学习
这两天看了看最大子序列问题,顺便的做一下笔记,最大子序列问题相信大家都再熟悉不过了,来回顾一下问题: 给定整数(可能有负数),求的最大值(为方便起见,如果所有整数均为负数,则最大子序列和为 0 )。 下面来看三种实现方法: 1,使用两层 for 循环,算法复杂度显然是 O(N²): ? intMaxSubSequ转载 2012-02-14 11:05:48 · 230 阅读 · 0 评论 -
【贪心法求解最小生成树之Kruskal算法详细分析】---Greedy Algorithm for MST
初衷: 最近在看算法相关的东西,看到贪心法解决mst的问题,可惜树上讲解的不是很清新,到网上找了很多资料讲解的也不透彻 只是随便带过就草草了事、这几天抽空看了下,总算基本思路理清楚了 主要还是得感谢强大的google,帮我找到一个很好的英文资料。(下面有链接,有兴趣的同学可以看看) 理顺了思路,就和大家分享下~希望对学习贪心法的同学会有所帮助。 这篇博客的主转载 2012-02-13 23:18:44 · 822 阅读 · 0 评论 -
n皇后详解及代码实现/C++
初衷 这个学期开了算法课,要几个关键算法思想的代码实现。当时感觉学的还可以了,也做了认真的笔记。真正写代码的时候发现还是 没有完全掌握。网上关于这方面的资料也零零散散不是很全,致使走了不少弯路。今晚上实验成功验收了,感觉自己也收获不小 遂决定把算法实现的详细思路记录下来,一是自己坐下总结、另外也希望给当时想我一样找资料、搞算法的同学一些帮助。 这中间我会尽最大可能的把问题描转载 2012-02-13 23:17:38 · 267 阅读 · 0 评论 -
dynamic programming动态规划实例之【1】Longest path in DAG
对于理论性比较强的学科、自己看书就可以没问题了、多看几遍也能理解了,比如说计算机网络这门课程 然而有的东西并不是多看几遍就能掌握的,如果自学的话就需要一些能让自己入门的实例, 从简单到稍微复杂、弄清楚了后也就能逐步掌握 不说废话、先来一个简单的例子吧: longest path in DAG Problem: Given a weighted directed a转载 2012-02-13 23:16:47 · 697 阅读 · 1 评论 -
图的深度优先搜索详解/Depth-first search/C++
图是一种常见的数据结构,深度优先和广度优先搜索都是常用的算法,这篇博文先介绍深度优先搜索。 和往常一样的,我会用朴实的语言来介绍它,所以只要认真看一定能理解。开始会先介绍下图的表示方法,如果已经掌握了大可跳过。 图的表示 要表示一个图G(V,E)有两种常见的表示方法,邻接矩阵和邻接表。这两种方法可用于有向图和无向图。对于稀疏图,常用邻接表表示, 它占用的空间|E|要小于|V转载 2012-02-13 23:13:34 · 3311 阅读 · 0 评论 -
比较三个数最大(小)一个
小知识点积累 int max3 (int a,int b,int c) { return (((a>b)? a:b)>c)? ((a>b)? a:b):c; }原创 2012-02-14 11:28:05 · 112 阅读 · 0 评论 -
c语言面试题之大数运算
请使用代码计算: 1234567891011121314151617181920*2019181716151413121110987654321 #include iostream>#include algorithm>#include stdio.h>#include string.h>using namespace std;#define MAX_DIGIT 500//大数运算转载 2012-02-14 11:09:55 · 248 阅读 · 0 评论 -
算法分析——走迷宫问题
1 #include stdio.h> 2 3 int visit(int i , int j); 4 5 int maze[7][7] = { 6 {2,2,2,2,2,2,2}, 7 {2,0,0,0,0,0,2}, 8 {2,0,2,0,2,0,2}, 9 {2,0,0,2,0,2,2},10 {2,2,0,转载 2012-02-14 11:08:22 · 205 阅读 · 0 评论 -
动态规划解背包问题/C++/Knapsack problem
前言 背包问题是一个经典的算法问题,可以用动态规划,贪心法,分支界限法等方法解决 问题描述:有n个物品,编号1,2,3,、、n,其中第 i 个物品重量为Wi 价值 Vi ,有一个容量为W的背包。 在容量允许范围内,如何选择物品,可以得到最大的价值。(为了简单起见,假设物品的重量 Wi 和价值Vi 都是正数) 根据取物品的方式,背包问题又可以被分为三类:转载 2012-02-14 11:06:44 · 557 阅读 · 0 评论 -
dijkstra算法
图论中的dijkstra算法用最简单的话说就是:使用优先队列实现的广度优先搜索。 广度优先搜索是利用分叉树的形式,一层一层的对节点进行搜索,利用这种方法来找最短路径是完全行得通的,先搜索出所有的路径,然后通过比较得到最短的那一条路径。 但是效率呢? 似乎有些差。 那么怎么改进呢? 回忆广度优先:1 从起始点开始。2 找出所有路径解 3 通过比较这些路径长度,找出最短的那一条。 问题在哪原创 2012-02-28 15:59:38 · 197 阅读 · 0 评论