找到一系列操作

时间:2013-08-02 14:04:50

标签: algorithm pseudocode

这最终应该用JavaScript编写。但是我觉得在我的算法清楚之前我不应该输入任何代码,这不是!

问题给定:从1开始,写一个给定数字的函数返回一系列操作,这些操作只包含产生相关数字的"+5""*3"

我的基本算法:

  1. 获取号码
  2. 如果数字是1   返回1.
  3. 否则,如果我们超过号码   返回-1。
  4. 如果达到了数字,则继续尝试"+5""*3",假设可以到达。
  5. 我的问题在于第4步:我看到有两条路径可以将我带到有问题的数字(目标),"+5""*3",但是13号,可以通过MOTTURE的BOTH路径找到?我只能做一件事或者另一件事! 我怎么知道要采取哪条路径以及我应该走多少次?我将如何在路径之间来回反弹?

3 个答案:

答案 0 :(得分:1)

我同意二叉树中广度优先搜索的概念。但是,我建议解决问题,并考虑使用“-5”或“/ 3”从目标返回到1的问题。这允许基于目标进行修剪。

例如,13不能被3整除,因此目标13的向后问题的第一步必须是“-5”,而不是“/ 3”。

它不会改变复杂性,但可以使算法在实践中更快地解决小问题。

答案 1 :(得分:0)

你基本上想要做一个广度优先的二叉搜索树。你可以使用递归,或只是一些while循环。每一步你取当前数字并加5或乘以3.做你的测试,如果找到输入值,则返回0或其他(你没有指定)。

这里的关键是关于数据结构以及如何搜索它的事情。你明白为什么它应该先宽广吗?你明白为什么它是二叉树吗?

回应评论: 首先,我很佩服你的努力。解决这种独立于语言的问题是解决问题的好方法。它不是关于Javascript(或任何其他语言)的愚蠢技巧。

因此,如果你没有找到一个返回-1,那么第一个下来的概念是你“搜索”一个解决方案。

其次你应该对二叉树做一些研究。它们是一个非常重要的概念!

第三,你应该先进行广度搜索。然而,这是最不重要的。它只会使问题更有效率。

答案 2 :(得分:0)

what about the number 13 which can be found by a MIXTURE of BOTH paths?? I can only do one thing or the other!

嗯,实际上你可以做到这两点。正如您提到的本书的chapter 3中的示例所示,您将看到函数find在其自身内部被调用两次 - 该函数在任何选择点尝试两个路径并且第一个正确的解决方案返回(您还可以尝试更改整体功能,以便返回所有正确的路径)。

How would I know which path to take and how many times I should take that path? How would I bounce back and forth between paths?

基本上,在路径之间来回弹跳是通过两者都行进来实现的。如果函数达到目标数,您知道它是否是正确的路径。