2013-08-02 31 views
0

這最終應該用JavaScript編寫。但是我覺得我不應該直接輸入任何代碼,直到我的算法清晰了,而不是!查找操作序列

問題:從1開始,編寫一個給定數字的函數會返回一個只包含"+5""*3"的操作序列,這些操作會產生有問題的數字。

我的基本算法:

  1. 獲取數
  2. 如果數字爲1
    回報1.
  3. 否則,如果我們超越數
    返回-1。
  4. 否則繼續嘗試到"+5""*3",直到達到數量(假設可達)。

我的問題是與步驟#4:我看到有兩條路可以走,這將帶給我的號碼有問題(目標),無論是"+5" OR "*3",但對於13號可以是通過MIXTURE找到兩條路徑?我只能做一件事或另一件事! 我怎麼知道我應該走哪條路以及我應該走多少路?我將如何在路徑之間來回跳動?

+0

你檢查了嗎? http://stackoverflow.com/questions/17652190/how-to-get-the-target-number-with-3-or-5-operations-without-recursion –

回答

0

你基本上想做一個寬度第一的二叉搜索樹。你可以使用遞歸,或者只是一些while循環。每一步你採取當前的數字,並加5或乘以3.做你的測試,如果你找到輸入值,然後返回0或什麼(你沒有指定)。

這裏的關鍵是關於數據結構以及如何搜索它。你明白爲什麼它應該是寬度第一?你明白爲什麼它是一棵二叉樹嗎?

迴應評論: 首先我很佩服你的努力。獨立於語言解決這類問題是解決問題的好方法。這不是關於Javascript(或任何其他語言)的愚蠢伎倆。

因此,第一個想到的概念是,如果您沒有找到一個返回值-1,則「搜索」解決方案。

其次你應該對二叉樹進行一些研究。他們是一個非常重要的概念!

第三你應該去寬度第一搜索。但是,這是最不重要的。這隻會讓問題變得更有效率。

+0

謝謝你的迴應。我不是計算機科學專業,因此不熟悉這些主題。我是自學的。我在一本名爲eloquent JavaScript的書中從第3章中得到了這個問題。你建議我應該研究什麼來理解這一點? – DEdesigns57

+0

我的意思是寬度和二叉樹是我不熟悉的方式。 – DEdesigns57

+0

@ DEdesigns57我建議搜索「二叉樹」,「寬度優先」,「深度優先」和「遞歸」。或者,查找一本關於在其索引中包含這些術語的算法的書,然後閱讀它。 –

1

我同意二進制樹中廣度優先搜索的概念。不過,我建議將問題解決,並考慮使用「-5」或「/ 3」從目標返回到1的問題。這允許基於目標進行修剪。例如,13不能被3整除,因此目標13向後問題的第一步必須是「-5」,而不是「/ 3」。

它不會改變複雜性,但可能會使算法在小問題實踐中更快。

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?

基本上,來回彈跳路徑之間由行進兩者來實現。你知道如果功能達到目標號碼是否是正確的路徑。