05 2019 档案
数据结构系列之2-3树的插入、查找、删除和遍历完整版代码实现(dart语言实现)
摘要:弄懂了二叉树以后,再来看2-3树。网上、书上看了一堆文章和讲解,大部分是概念,很少有代码实现,尤其是删除操作的代码实现。当然,因为2-3树的特性,插入和删除都是比较复杂的,因此经过思考,独创了删除时分支收缩、重新展开的算法,保证了删除后树的平衡和完整。该算法相比网上的实现相比,相对比较简洁;并且,重 阅读全文
posted @ 2019-05-14 00:59 Burkut 阅读(3135) 评论(0) 推荐(0)
求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码
摘要:说明,本文全文代码均用dart语言实现。 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现。本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的。两种方法主要思路是一样的,只是实现细节上略有差异。具体代码如下: 如果求一个集合的全排列,如果是集合的话, 阅读全文
posted @ 2019-05-13 18:15 Burkut 阅读(504) 评论(0) 推荐(0)
递归算法之不用乘号的乘法——用位移实现乘法(dart语言实现)
摘要:前两天突发奇想,写一个乘法的实现,但不用乘号*。并测试一下性能如何。因此就有了下面的代码:(本文主要目的是为了玩递归和位移,因此仅限自然数) 首先,标准乘法: 第二,从数学的角度,乘法其实就是加法,只是加法的简写而已,因此 a * b 可以理解为 b 个 a 相加;故得出用加法代替的乘法。为了减少加 阅读全文
posted @ 2019-05-10 19:12 Burkut 阅读(1789) 评论(0) 推荐(0)
递归算法之汉诺塔的实现
摘要:一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上 阅读全文
posted @ 2019-05-07 20:39 Burkut 阅读(699) 评论(0) 推荐(0)
递归算法之Fibonacci 斐波那契数列第n个数的求解
摘要:Fibonacci 斐波那契数列第n个数的求解,也可以用递归和非递归的形式实现,具体如下,dart语言实现。 阅读全文
posted @ 2019-05-07 18:07 Burkut 阅读(1317) 评论(0) 推荐(0)
递归算法之阶乘代码实现与非递归实现
摘要:求一个自然数n的阶乘,也非常适合用递归的方式实现。当然,所有的递归都可以用非递归的方式来实现,只是在代码结构上将显得啰嗦和复杂。现代编译器对递归函数的调用开销已经大幅优化,因此,对于类似汉诺塔等问题的求解,用递归实现非常简洁明了,并且易于阅读和理解。 本文给出自然数n的阶乘的递归与非递归求解算法代码 阅读全文
posted @ 2019-05-07 18:03 Burkut 阅读(1537) 评论(0) 推荐(0)
递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
摘要:求一个集合S的m个元素组合的所有情况,并打印出来,非常适合采用递归的思路进行求解。因为集合的公式,本身就是递归推导的: C(n,m) = C(n-1,m-1) + C(n-1,m)。 根据该公式,每次递归会分裂为两次递归,直至m=1或m=n的情况,打印出当前组合情况。 本文实现了给定m的递归代码,并 阅读全文
posted @ 2019-05-07 17:54 Burkut 阅读(1177) 评论(0) 推荐(0)