假設我有一個輸入字符串,例如:aab
而且我給予目標字符串,例如:bababa
然後我我給了一套轉換規則。例如:查找給定的輸入和目標串需要轉換的最小數目
ab -> bba
b -> ba
我怎麼能這樣做,在C,一個算法,會發現最低數量將需要在輸入字符串被應用到獲得目標字符串轉換。
在這個例子中,例如,數目將是3。因爲我們會做:
1 - Apply rule 1 (abba)
2 - Apply rule 1 again (bbaba)
3 - Apply rule 2 (bababa)
是可能發生的給定的輸入和目標,有沒有解決辦法,也應該被注意到。
我在做這件事的策略上非常失落。它涉及到我的想法創建自動機,但我不知道我將如何適用於這種情況。我認爲這是一個有趣的問題,我一直在網上進行研究,但我所能找到的只是給定規則的轉換,而不是如何確保它是最小的。
編輯:作爲建議的答案之一,我們可以從初始字符串開始創建一個圖並創建將轉換應用到前一個節點的結果。但是,從我的角度來看,這帶來了一些問題:
想象一下,我有一個看起來像這樣的轉換 - > ab。我的初始字符串是'a'。而我的輸出字符串是'c'。所以,我一直在做轉換(成長圖)所示:
一個 - > AB AB - > ABB ABB - > AB | BB ...
我怎麼會知道,當我需要停止建立圖表?
- 說我有以下字符串aaaa,我有一個像aa-> b的轉換規則。我將如何創建新節點?我的意思是,如何在輸入字符串中找到子字符串並記住它們?
我會通過算法設計開始*外* C(或任何語言)的,然後用* C. – WhozCraig 2013-02-22 21:59:00
WhozCraig我同意它的代碼*。問題是算法本身。我不知道如何開始。 – 2013-02-22 22:01:00
如果你還沒有,你應該檢查[正式文法](https://en.wikipedia.org/wiki/Formal_grammar)和[解析](https://en.wikipedia.org/wiki/Parsing) 。我知道這是一個很大的話題,但如果你能弄清楚你正在處理的語法的類型/複雜性,你可以很容易地找到解析它的算法(或者它是[Context-Sensitive](https:// en.wikipedia.org/wiki/Context-sensitive_grammar),因此非常困難)。 – 2013-02-22 22:07:18