话题
搜索

贪婪算法


用于递归构造设置对象的从尽可能小的组成部分。

给定一个设置属于k个 整数(a_1,a_2型, ...,(_k))带有a_1<a_2<<(_k),贪婪算法可用于查找矢量系数的(c1,二氧化碳, ...,c_k(k))这样的话

 sum_(i=1)^kc_ia_i=c·a=n,
(1)

哪里c·a点积,对于某些给定的整数 n个。这可以通过以下方式实现c_i=0对于i=1, ...,k-1号机组和设置

 c_k=|_n/(a_k)_|,
(2)

哪里|_x个_|是楼层功能。现在定义表示和n个作为

 Delta=n-c·a。
(3)

如果增量=0在任何一步,都会找到一个表示。否则,将非零 计算机接口具有最小值的项我,全部设置cj=0对于j<i,并根据

 c_j=|_Delta/(a_j)_|
(4)

对于j=i-1,…,1直到增量=0或者所有的可能性都已经用尽了。

例如,McNugget数字是仅使用表示的数字(a1,a2,a3)=(6,9,20).采取n=62并迭代应用该算法给出序列(0,0,3),(0,2,2),(2,1,2)增量=0因此,.62是一个麦乐鸡块具有

 62=(1·6)+(4·9)+(1·20).
(5)

如果任何 整数 n个可以用表示c_i=0或使用序列1(a_1,a_2型, ...), 那么这个序列称为完成序列.

贪婪算法还可用于将任意分数分解为古埃及分数在有限的步骤中。对于分数 账户,找到最少的整数 x_1这样的话1/x_1<=a/b即。,

 x_1=【b/a】,
(6)

哪里【x】天花板函数.然后找到最少的整数 x2个这样的话1/x_2<=a/b-1/x_1。重复直到没有剩余。这个算法给出两个或更少的条件1/n个2个/个,三个或更少的术语3/n号,四个或更少4/n号.


另请参见

硬币问题,完整序列,埃及分数,弗罗贝纽斯方程式,弗罗贝尼乌斯数,整数关系,背包问题,莱文·奥沙利文贪婪算法,McNugget编号,反向贪婪算法,平方数字,子集总和问题,西尔维斯特序列

与Wolfram一起探索| Alpha

工具书类

Wagon,S.“贪婪的硬币”http://library.wolfram.com/infocenter/MathSource/5187/.

引用的关于Wolfram | Alpha

贪婪算法

引用如下:

埃里克·魏斯坦(Eric W.Weisstein)。“贪婪算法。”发件人数学世界--Wolfram Web资源。https://mathworld.wolfram.com/GreedyAlgorithm.html

受试者分类