12 2012 档案

摘要:堆在实现优先队列中经常用到,这里介绍3种堆的设计原理以及时间复杂度分析:具体的实现及原理待续, 阅读全文
posted @ 2012-12-29 23:20 weixliu 阅读(1010) 评论(0) 推荐(0)
摘要:贪心算法应该算是动态规划中的一种特例~如果一个事例满足贪心选择性质和最优子结构性质,则可以利用贪心算法,每一步可以做出局部最优的选择,因为具有贪心选择性质,又因为具有最优子结构,所以每次的局部最优选择能够达到全局的最优,所以最优就是一个全局的最优解~ 接下来贴一下课件的说明,考试结束了,心情很放松,有空补充一些具体问题的实现代码。 接下来通过一个活动选择问题的描述体会一下贪心算法与动态规划之间的关系。问题描述动态规划解决方案:跟据上面的递归式,可知至少是一个O(n2)的算法,因为内层的k的循环为1至n,外层循环为1至n,所以猜测下届至少是这个复杂度。贪心解决方案:理论基础: 阅读全文
posted @ 2012-12-29 23:17 weixliu 阅读(507) 评论(0) 推荐(0)
摘要:由于要考试了,这里只是简单的罗列一下,考试完毕之后继续完善~单元最短路径单元最短路径有很多变体问题,比如单元目的最短路径,最短路径也有很多性质~,这些性质是算法正确性的基础,这些考试之后来完善,关于每个算法都要用到的松弛操作如下RELAX(u,v,w) if d[v] > d[u]+w(u,v) d[v]= d[u]+w(u,v) father[v]=u关于每个算法的初始化操作也写在前面INITIALIZE-SINGLE-SOURCE(G,s) for each vertex v in G d[v]= MAX fath... 阅读全文
posted @ 2012-12-28 11:20 weixliu 阅读(5411) 评论(0) 推荐(0)
摘要:这篇只是作为学习笔记之用,记录复习中的一些知识,算法设计也均是伪代码表示,如果你想要找代码实现就不必看这些内容了,不过如果想要简单回顾一下相关知识还是可以浏览一下的。如果时间不仓促每个算法实现一下还是挺好的,不过这都是考试结束之后的事情了~图的分类 图分为有向图和无向图,两种都可以表示为G={V,E},分别是顶点和边,有向无向均是针对边来说的。 下面的lgE=lgV是同一个数量级的这个在最小生成树算法的算法复杂度分析中比较重要,所以这里罗列出来。 图的两种表示方法图的表示方法有两种,邻接链表和邻接矩阵: 邻接链表有一个握手定理,就是遍历邻接表中所有点的邻接点,在无向图中需要2E次,有向图中需. 阅读全文
posted @ 2012-12-27 10:59 weixliu 阅读(10106) 评论(0) 推荐(0)
摘要:前面介绍了一个比较常用的算法设计技术,分治法,当碰到一个实际的问题时,看能够利用分治法解决,分治法适应于解决子问题独立且不重叠的,但是如果子问题出现重叠就不利用分治法了。这里介绍另外一种算法设计方法,动态规划,这种算法设计方法虽然基本思想和分治法很相似,划分子问题,通过子问题解决更高层的问题。但是两者明显的区别在于动态规划划分的子问题具有重叠的性质(不过独立性还是要保证的),而且一般用于解决最优化的问题~ 动态规划算法的解决步骤:1、我认为首先比较重要的还是正确的抽象化问题,然后得到问题的最优子结构。有一部分题目的描述方式完全是文字化的描述,这时就先抽象出其中的数学结构,然后根据数学结构得出. 阅读全文
posted @ 2012-12-25 17:19 weixliu 阅读(1096) 评论(0) 推荐(0)
摘要:选择问题定义,实际上所有处理均可以推广到集合中包含重复数值的情形。 输入:一个包含n个(不同的)数的集合A和一个数i,1<=i<=n。 输出:元素x属于A,它恰大于A中其他的i-1个元素。1、最大值最小值 针对一个序列取得最大和最小值均需要n-1次比较。这是一个下限,确定最大值或者最小值的算法可以看作各个元素之间一场锦标赛,每次比较都是一场比赛,两个元素中较小的或者较大的获胜,除了最终的最大值和最小值,所有其他元素都需要输一次,所以n-1次是必须的。 接下来是一些比较有意思的问题,比如同时找出最小值和最大值,当然可以n-1次比较找出最大值,然后n-2次比较找出最小值,不过还是有比这 阅读全文
posted @ 2012-12-23 20:23 weixliu 阅读(12501) 评论(0) 推荐(0)
摘要:算法要考试了,复习到了排序的知识,所以对复习的内容进行以下总结,参考书目《算法导论》。排序问题是算法与数据结构中常讲到的问题了,有次面试问到了具体的快速排序的原理以及实现,顿时当时就愣了,平时各种语言提供的类库中都有实现好的快速排序算法,针对这个算法原理也就没有在意;不过这次算法课程结束了感觉算法内容还是挺重要的,不过参考算法导论的话真的学了好多数学知识,也被许多数学知识给吓住了,算法导论一书重点不在于算法的实践,经典的算法只是给出了伪代码,然后大量的篇幅进行正确性证明,复杂度分析,胡言乱语一番,接下来具体算法的介绍啦。1、插入排序插入排序的原理是访问过的部分是有序的,不过只记住原理有时候是. 阅读全文
posted @ 2012-12-23 11:23 weixliu 阅读(5970) 评论(1) 推荐(1)
摘要:递归分析一般利用的方法是主定理,辅助的方法有替换法,递归树方法~主定理:递归树:主定理的证明可以通过递归树的方法进行;主定理适用的范围比较局限,有些情况不能被包括,这些情况就需要利用递归树的方法了,主定理的case1是f(n)小于nlogba多项式时间,原定理描述为f(n)=O(nlogba-ε)且ε>0,它与case2中f(n)=Θ(nlogba)中间差一些情况,就是f(n)小于nlogba,但是多余的不是多项式时间;另外就是case2和case3之间相差的部分,就是f(n)大于nlogba,但是如果不大于多项式时间,就不能满足主定理了;另外一种是case3中的f(n)不满足后面的情况 阅读全文
posted @ 2012-12-21 11:37 weixliu 阅读(10902) 评论(3) 推荐(0)
摘要:续前面的聚类算法实验,想要达到可视化的实时更新,并且对聚类的图形进行染色,这里单独开辟一个线程刷新界面,这里为设定一个100ms的计时器不停的invalidate(),然后刷新,这时候发现屏幕上的图形一闪一闪的,或者一行一行的刷新,这样效果不是很理想,这时想到了java里双缓冲的一种实现方法,java中调用repaint()的时候中间会先进行update(),然后在进行paint(),这里MFC调用invalidate()的时候会先调用OnEraseBkgnd(CDC* pDC)函数进行背景填充,然后调用OnDraw(CDC* pDC)函数进行重新绘制。闪烁现象就是因为擦除、重绘这两种的颜色反 阅读全文
posted @ 2012-12-20 22:23 weixliu 阅读(2197) 评论(0) 推荐(0)
摘要:这里的想说的NPC不是Non-Player-Controled,非玩家控制角色,而是Non-determinisitc Polynomial complete problem,它属于一类很特殊的问题,迄今为止,没有人能够找出求解NPC问题的多项式时间的算法,同时也没有人能够证明对于这类问题不存在多项式时间算法; 最短(Bellman -Ford)与最长简单路径,欧拉游程(Fleury)和哈密顿回路,2-CNF可满足性和3-CNF可满足性,这些问题看起来差别很小,但是成对的问题中前者存在多项式时间的算法,而后者属于NPC问题,不存在多项式时间的算法;其实算法中关于这个问题的研究感觉也仅仅存在理. 阅读全文
posted @ 2012-12-18 16:36 weixliu 阅读(5931) 评论(3) 推荐(5)
摘要:KMP算法,以为一个简简单单的算法,看了我一天时间竟然没有看懂...果然图样图撕破了,三位大师提出的算法岂是我等屌丝能够迅速的理解的?不过话说看了这次算法才知自己的智力有多么的吃紧,还是要努力学习呀~智力不行就要加把劲了。(接下来字符串匹配算法均参考算法导论) 字符串匹配,算法的模型不用提出大家都知道,仅仅是在文本T字符串中精确匹配模式串P,简简单单,轻轻松松的就知道这么一个模型,自然而然的能够想到一个最笨最实用的算法,朴素算法,朴素算法就是逐个比对,然后在文本串中下移一位在进行逐个比对,算法复杂度O((n-m+1)m), 不过这种简单的方法的时间复杂度不是我们能够容忍的,提高一点有一... 阅读全文
posted @ 2012-12-14 00:06 weixliu 阅读(4708) 评论(1) 推荐(0)
摘要:根据上面第二个数据集的簇的形状比较怪异,分簇结果应该是连起来的属于一个簇,但是k-means结果分出来很不如人意,所以这里介绍一种新的聚类方法,此方法不同于上一个基于划分的方法,基于划分主要发现圆形或者球形簇;为了发现任意形状的簇,用一个基于密度的聚类方法,这类方法将簇看做是数据空间中被低密度区域分割开的稠密对象区域,这一理念刚好也符合数据集的特征。 DBSCAN:一种基于高密度连通区域的基于密度的聚类方法,该算法将具有足够高密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇。它将簇定义为密度相连的点的最大集合;为了理解基于密度聚类的思想,首先要掌握以下几个定义: 给定对象... 阅读全文
posted @ 2012-12-08 14:23 weixliu 阅读(27602) 评论(6) 推荐(4)
摘要:说来这个聚类算法的实现是数据挖掘课程的第三次作业了,前两次的作业都是利用别人的软件,很少去自己实现一个算法,第一个利用sqlserver2008的商业智能工具实现一个数据仓库,数据处理,仓库模型的建立绕,维度表,事实表的创建,不过考试的时候应该也会有数据仓库常用模型的建立吧;第二次利用weka的分类和关联规则算法跑一些提供的数据,其实那些算法的参数原理都不晓得; 不过这次的聚类作业竟然是实现一个自己的算法针对提供的数据进行聚类,先描述一下提供的要聚类的数据,主要是两个数据集: 针对数据集1能够很清楚的看出聚类的意图,但是数据集2不太明白数据聚类的意图;针对数据集1可以看出利用欧几里得距离... 阅读全文
posted @ 2012-12-07 17:21 weixliu 阅读(8766) 评论(1) 推荐(0)
摘要:这里介绍一下两个比较实用的功能,一个是位对话框绘制自适应的位图背景,随着对话框的变化位图背景能够改变,但是这里的位图效果是平铺效果,我目前还没找到怎么实现一个位图撑满整个对话框,随着变化位图进行拉伸这种效果,希望有知道的人告诉我一下,不过我会查找一下资料的,等到有最新的资料我会更新在这里,这里先介绍平铺效果,效果图如下:虽然不是很好看,但是固定了对话框大小,设计了相对应的位图之后作为设计程序背景图还是可以的,哈哈,总算是一种技术;这里主要实现代码就下面的几行,这个函数onCtlColor是为控件绘制背景的,获取为对话框绘制背景的那一部分,重新绘制背景即可,这里重点关注利用位图作为画刷那一部分; 阅读全文
posted @ 2012-12-05 12:00 weixliu 阅读(772) 评论(0) 推荐(0)
摘要:VC的代码看起来总是那么的凌乱,总是不想下手去学习它,这些书本一直在暑假沉睡了很久,为了程序考试,拿出来学习了,因为至少现在不在是一无所知的少年了,知道了语言的语法,知道了一些API的应用,了解了一点面向对象的思想,决定直接拿着实例来啃了,昨天尝试了第一个实例,虽然只是简单的功能,昨天看了一天无从下手,一直不愿意下手,一拖再拖,今天终于下手了,虽然做了很多typewriter的工作,但是我相信这样还是会有进步的,只要把理解的记录下来。 这两天完成的一个实例是自绘对话框,虽然win7的对话框已经很美丽了,但是如果能够利用自己设计的位图作为对话框岂不是更完美,不是么?先上最终的效果图,这个效果可. 阅读全文
posted @ 2012-12-05 09:14 weixliu 阅读(3900) 评论(0) 推荐(0)