您可以使用多少种方法使用数字<=和N计数到N

达努特·克拉帕

您可以用多少种方法将N等于或小于N的数字相加等于n。解决该问题的算法是什么?

示例:假设我们有

n =10;

因此有很多组合,但是例如,我们可以做:

1+1+1+1+1+1+1+1+1+1 = 10
1+2+1+1+1+1+1+1+1=10
1+1+2+1+1+1+1+1+1=10
.....
1+9=10
10=10
8+2=10

等等。

如果您认为这是加泰罗尼亚语的问题,那么答案是:该问题似乎是加泰罗尼亚语的问题,但不是。如果看一下结果,您会发现,对于N = 5来说,在加泰罗尼亚语算法中,您有14种可能性。但是在正确答案中,如果您全部计算,则有2 ^ 4 = 16的可能性;如果仅保留唯一组合,则有斐波那契数组。例如,N = 5,我们有8种可能性,因此加泰罗尼亚语算法无法验证。

这是我在一次有趣的测验中收到的一个问题,当时我认为该解决方案是众所周知的公式,因此我浪费了大量时间试图记住它:)我找到了2个针对该问题的解决方案,如果您仅考虑独特的组合,则更多。例如2 + 8与8 + 2相同,您只考虑其中的1个。那么解决该问题的算法是什么?

达努特·克拉帕

我发现的所有3个解决方案都使用数学归纳法:

解决方案1:

if n =0 comb =1
if n =1 comb = 1 
if n=2 there are 1+1, 2 comb =2 = comb(0)+comb(1)
if n=3 there are 1+1+1, 1+2, 2+1, 3 comb = 4 = comb(0)+comb(1)+comb(2)
if n=4 there are 1+1+1+1, 1+2+1,1+1+2,2+1+1,2+2,1+3,3+1,4 comb = 8 =comb(0)+comb(1)+comb(2)+comb(3)

现在,我们在这里看到一个模式,该模式表示:

at k value we have comb(k)= sum(comb(i)) where i between 0 and k-1
using math induction we can prove it for k+1 that:
comb(k+1)= sum(comb(i)) where is is between 0 and k

解决方案编号2:

如果我们更加关注解决方案1,我们可以这样说:

comb(0)=2^0
comb(1)=2^0
comb(2)=2^1
comb(3)=2^2
comb(4)=2^3

comb(k)=2^(k-1)
again using the math induction we can prove that 
comb(k+1)=2^k

解决方案编号3(如果仅保留唯一的组合),我们可以看到:

comb(0)=1
comb(1)=1
comb(2)= 1+1,2=2
comb(3)= 1+1+1, 1+2, 2+1, 3 we take out 1+2 because we have 2+1 and its the same comb(3)=3
comb(4) = 1+1+1+1, 1+2+1,1+1+2,2+1+1,2+2,1+3,3+1,4, here we take out the 1+2+1,,2+1+1 and 1+3 because we have them but in different order comb(4)= 5.

如果继续,我们可以看到:

comb(5) = 8
comb(6)=13 

我们现在可以看到以下模式:

comb (k) = comb (k-1) + comb(k-2) the Fibonacci array
again using Math induction we can prove that for k+1
comb(k+1) = comb(k)+comb(k-1)

现在,很容易使用一种语言使用两个解决方案的递归来实现这些解决方案,或者仅使用2 ^ k的解决方案使用非递归方法来实现这些解决方案。

顺便说一下,这与图论有着紧密的联系(您可以从更大的图开始构建多少个子图-我们的数量N,而子图是计数的方式)

是不是很神奇?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使用rowSums和is.numeric仅对数字列求和?

来自分类Dev

有没有一种方法可以使用SKSpriteNode和PhysicsBody参数使用Spritekit制作软体?

来自分类Dev

从 0、1 和 2 使 n 的数字长度有多少种方法?

来自分类Dev

有没有一种方法可以使用min和max来编写if-else?

来自分类Dev

有没有一种方法可以使用min和max来编写if-else?

来自分类Dev

有没有一种方法可以使Nautilus显示“最近使用过的”文件和目录?

来自分类Dev

有没有一种方法可以使用JS和AngularJS获取HTTP状态代码名称?

来自分类Dev

有没有一种方法可以使用qbsdk和qbxml从Quickbooks脱机删除客户?

来自分类Dev

您可以使用JPA和Hibernate在一个事务中进行批量删除吗?

来自分类Dev

您可以使用LESS将变量用作CSS属性和值吗?

来自分类Dev

您可以使用angularJs ng-hide进行div淡入和淡出吗?

来自分类Dev

您可以使用MPI_Send和MPI_Recv发送数组中的数组吗?

来自分类Dev

您可以使用LiveCharts显示带有x和y值对的线系列吗?

来自分类Dev

您可以使用数据框来辅助R中的“查找和替换”吗?

来自分类Dev

您可以使用JAX-WS和SOAP抛出链式异常吗?

来自分类Dev

您可以使用推送通知和应用内购买吗?

来自分类Dev

有没有一种方法可以使用计数器来计数出现次数(嵌套列表)

来自分类Dev

有没有一种方法可以将matplotlib动画另存为视频(使用ffmpeg),以使最后一帧保持N秒?

来自分类Dev

您可以使用JavaScript中的对象在O(N)(线性)时间内对正整数排序吗?

来自分类Dev

带有DVI,VGA和HDMI的主板:一次可以使用多少个?

来自分类Dev

使用NSTimer从0.00计数到176.20

来自分类Dev

有没有一种方法可以使我的单词计数程序更快而又不使用不正当的技巧?

来自分类Dev

有没有一种方法可以使用嘲讽(或类似方法)来模拟我从单元测试中“调用”的脚本的日期和时间?

来自分类Dev

有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹中获取文件

来自分类Dev

有没有一种方法可以使用实际的MVC视图和模型来创建HTML文件?

来自分类Dev

嵌入式文档和有没有一种方法可以使用“ type”关键字作为模型字段名称

来自分类Dev

是否有一种方法可以使用不同的环境配置文件进行基于Ionic Framework的Cordova应用程序的开发和生产设置

来自分类Dev

有没有一种方法可以使用barplot或ggplot在同一张图上同时具有barplot和stacked barplot?

来自分类Dev

有没有一种方法可以使用PhpStorm和Xdebug调试RabbitMQ Consumer(php-ampqlib)?

Related 相关文章

  1. 1

    有没有一种方法可以使用rowSums和is.numeric仅对数字列求和?

  2. 2

    有没有一种方法可以使用SKSpriteNode和PhysicsBody参数使用Spritekit制作软体?

  3. 3

    从 0、1 和 2 使 n 的数字长度有多少种方法?

  4. 4

    有没有一种方法可以使用min和max来编写if-else?

  5. 5

    有没有一种方法可以使用min和max来编写if-else?

  6. 6

    有没有一种方法可以使Nautilus显示“最近使用过的”文件和目录?

  7. 7

    有没有一种方法可以使用JS和AngularJS获取HTTP状态代码名称?

  8. 8

    有没有一种方法可以使用qbsdk和qbxml从Quickbooks脱机删除客户?

  9. 9

    您可以使用JPA和Hibernate在一个事务中进行批量删除吗?

  10. 10

    您可以使用LESS将变量用作CSS属性和值吗?

  11. 11

    您可以使用angularJs ng-hide进行div淡入和淡出吗?

  12. 12

    您可以使用MPI_Send和MPI_Recv发送数组中的数组吗?

  13. 13

    您可以使用LiveCharts显示带有x和y值对的线系列吗?

  14. 14

    您可以使用数据框来辅助R中的“查找和替换”吗?

  15. 15

    您可以使用JAX-WS和SOAP抛出链式异常吗?

  16. 16

    您可以使用推送通知和应用内购买吗?

  17. 17

    有没有一种方法可以使用计数器来计数出现次数(嵌套列表)

  18. 18

    有没有一种方法可以将matplotlib动画另存为视频(使用ffmpeg),以使最后一帧保持N秒?

  19. 19

    您可以使用JavaScript中的对象在O(N)(线性)时间内对正整数排序吗?

  20. 20

    带有DVI,VGA和HDMI的主板:一次可以使用多少个?

  21. 21

    使用NSTimer从0.00计数到176.20

  22. 22

    有没有一种方法可以使我的单词计数程序更快而又不使用不正当的技巧?

  23. 23

    有没有一种方法可以使用嘲讽(或类似方法)来模拟我从单元测试中“调用”的脚本的日期和时间?

  24. 24

    有没有一种方法可以使用ClassLoader和getClass()方法从res文件夹中获取文件

  25. 25

    有没有一种方法可以使用实际的MVC视图和模型来创建HTML文件?

  26. 26

    嵌入式文档和有没有一种方法可以使用“ type”关键字作为模型字段名称

  27. 27

    是否有一种方法可以使用不同的环境配置文件进行基于Ionic Framework的Cordova应用程序的开发和生产设置

  28. 28

    有没有一种方法可以使用barplot或ggplot在同一张图上同时具有barplot和stacked barplot?

  29. 29

    有没有一种方法可以使用PhpStorm和Xdebug调试RabbitMQ Consumer(php-ampqlib)?

热门标签

归档