
趣味编程
文章平均质量分 59
LHJ884
这个作者很懒,什么都没留下…
展开
-
平面坐标两点间路径问题
有一道挺有意思的题目 如图所示: 我的解决思路: 利用递归解决,不过暂时只能得到路径条数,如果需要打印出路径这个要求还没想到好方法,用栈记录?希望高手不吝赐教,谢谢! 测试代码及结果:原创 2015-07-28 22:04:37 · 909 阅读 · 0 评论 -
5行代码搞定floyd算法
简介floyd是图搜算中很经典的一个算法,用于求一副图中任意两点之间的最短路径(时间,花费等)。其算法思想感觉比Dijkstra简单,而且代码也很容易实现。不过就是效率比较低,三个for循环导致复杂度为O(n3)。实例假如有如下的地图,图中四个点代表不同的城市,带箭头的边表示飞往各城市的机票(城市1可以到城市2,但城市2不可直接到城市1,只能通过其他城市周转)。我们利用二维矩阵存储这幅地图的各个点和原创 2015-08-05 21:49:32 · 1001 阅读 · 1 评论 -
全排列问题
简介字符串全排列是个很经典的问题,记得在毕业前夕面试一家游戏公司,要我手写代码,然后就没有然后了。现在理解了递归是多么的神奇和有用(虽然递归有时候效率是个瓶颈)。所谓字符串全排列,就是打乱顺序重新组合,如abc的全排列有6种,abc,acb,bac,bca,cab,cba。而用代码如何实现呢?实现简单地说:就是第一个数分别以后面的数进行交换E.g:E = (a , b , c),则 prem(E)=原创 2015-08-05 00:11:27 · 646 阅读 · 0 评论 -
并查集实例详解
一、简介并查集,是一种很有用的数据结构。可以把它想象为多棵独立的树。 并查集的常用基本操作有查找任意两个树节点,看看它们是否属于同一棵树(其实就是查不同节点的根节点是否一样即可),如下图b & e 同属于根为c的树,所以它们在同一个集合;而h & g则不属于同一集合。合并这些独立的树,成为一棵更庞大的树。(其实也很简单,就是将一颗树的根节点成为另一个树根节点之下的孩子即可)合并操作如图所示:原创 2015-08-04 00:13:24 · 2456 阅读 · 0 评论 -
Trie树兄弟单词实例
Trie树趣味实例如果一个单词,将其字母顺序重新排列可以生成另一个单词,则称这两个单词是兄弟单词。 如:”mary“ & ”army“ “cinema”&“iceman” 现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有哪些兄弟单词?要求时间和空间效率尽可能的高。解决思路:利用Trie树就可以妥善解决。 只需将上面的树节点增加一个vector< string >,构建原创 2015-08-03 16:29:42 · 711 阅读 · 0 评论 -
Trie树词频统计实例
Trie树词频统计实例原创 2015-07-26 00:00:07 · 3724 阅读 · 0 评论 -
C++文本查询程序实例
需求介绍假如有这样的需求: 处理一个英文文本(简单处理为无标点),用户输入一个单词:如you, 程序执行,显示you在文本文件中出现的次数,以及其所在行的内容。如果该单词在一行中出现多次,则此行只显示一次即可。查询结果按行号升序输出各行内容。解决思路利用C++实现这样一个简单的文本查询需求十分简单。 编写两个类 1)TextQuery 2)QueryResult所用数据结构:使用ve原创 2015-08-03 15:37:44 · 995 阅读 · 0 评论 -
最大子数组问题
简介最大字数组问题我就不赘述了,网上一搜就有。 在算法导论第四章,分治策略,对最大子问题这个经典的编程题目进行了十分详细生动的描绘,类比股票的正负波动,深入浅出,读起来十分有趣。并且不断优化方法,从一开始的暴力法,到左中右分治法,将复杂度从O(n3)逐渐降低到O(nlogn) ps:甚至还可以用动态规划法将复杂度降为O(n)。思考过程十分精彩,伪代码也比较好懂。光看不练空把式,所以决定将其伪代码实原创 2015-07-28 22:27:04 · 573 阅读 · 0 评论 -
约瑟夫环问题
简介约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。编程解决思路思路一 环形链表很显然立马就会联想到用环形链表解决,很直观,编码也不会很原创 2015-07-28 23:46:34 · 509 阅读 · 0 评论 -
Dijkstra最短路径算法详解
简介Dijkstra最短路径算法是非常经典的图搜索算法,而且具有一定难度,需要花时间好好理解。算法导论第24章对此有详细的分析,值得研究一番。而我自己也结合一个具体实例,实现了代码,确实只有在编码的过程中才能理解算法的细节,提高自己的算法能力。实例分析1.分步解析Dijkstra最短路径算法也叫单源最短路径算法,意思就是只需要输入一个起点,求出该起点到图中其余点的最短路径即可。(而floyd则是求任原创 2015-08-06 00:26:44 · 2160 阅读 · 0 评论