假設有兩個8位的整數A和B。限定三種操作 加一,減一,翻轉。如何求能使A變為B的最小運算元?

時間 2021-05-31 06:56:16

1樓:Qian

遞迴處理吧,但是不是最優就不知道了

int find(int A,int B){if(A==B) return 0;

else {

if(Aint a=find(A-1,B);

int b=find(reverse(A),B);

return a好吧,我天真了,這玩意好像不收斂,得仔細想想怎麼剪枝

2樓:小黑AWM

可以考慮A*,h函式比較容易想到可以設定為當前狀態到目標狀態的差的絕對值。因為最差的時候也可以通過一直加一或者減一到達目標,所以估價函式值一定劣於真實值所以可以保證解的正確性。

3樓:李青影

-假設有兩個8位的整數A和B。限定三種操作:加一,減一,翻轉。如何求能使A變為B的最小運算元?

我不是搞數學的,但這個問題裡似乎蘊含了些很有意思的東西,來玩玩

這和群論是有點關係,但這個結構的對稱性很奇怪,不知道群的知識能幫到多少

廣度優先搜尋(breadth first search, BFS)複雜度似乎太高,雖然分叉只有三個,但步數太多,恐怕不能直接做,至少要先降低複雜度

問題的描述:

有兩個八位數a= 和b= ,定義三個操作+,-,|如前所說(加一,減一,翻轉),使有乙個這樣的操作序列如s以此序列對a執行操作能得到b。

給定a和b,求所有這樣的操作序列中長度最短的那個。

降低複雜度就得找找規律:

最短的序列中不存在+和-相鄰的情況

如果存在這種情況比如++-,則一定能簡化成+,所以存在++-情況的不是最短序列

這就排除了》99%的多餘情況了

由1, 這種序列可以進一步表示成l|m|n...,其中l,m,n為整數,如2表示++,-3表示---,以此類推

2. 最短的序列中不存在...m|0|n...

因為有更短的序列...m+n...能達到同樣的效果

3. 最短序列中的數字<10000

因為如果有大於10000的數字l,...l...,則存在另乙個序列...|1000|l-10000...長度更短且效果相同

4. 如果序列中存在...l|m|n...,則...l+n|m|...能達到同樣的效果

因為翻轉兩遍等於沒翻。。。而且由3, 最短序列中的數字操作只會在右半邊折騰。。。

由2和4可得到:

5. 最短序列中不存在三個或三個以上的翻轉操作|

如果存在...l|m|n|p...則由2和4可得...l+n|m+p...是個更短且效果相同的序列

所以:6. 最短序列是n, 0|m|n, m|n|0或m|n的形式

到了這一步,暴力破解就容易了吧

這個思路中沒有用特別嚴格的表述,一是那樣會讓人難看下去,二是自己也懶得想到底。。。

這裡面可能有漏洞的地方是4,我不知道進製這件事如何考慮才嚴格。。。

至少這樣能找到很短的解,如果不是搞數學非要找最優解的話,大概也夠了吧

4樓:Yuxuan

首先,對 的操作都可以轉變為對 的操作.

考慮動態規劃,定義 表示從 到 的最小運算元, 可以轉移到 , (這裡 表示對 進行翻轉). 可以用記憶化搜尋的方式來實現轉移, 就是答案. (沒明白這裡加法減法保證合理的意思.

轉移的時候自己處理邊界吧)八位數狀態數為轉移複雜度 . 因此時間複雜度為

5樓:

感覺可以用貪心

假設A可以寫做a1a2,B可以寫做b1b2,a1a2b1b2各有4位,那顯然除了某些特殊情況(比如其中乙個數非常接近0或者9999),想影響a1或者a2中的數最優的方法是把它們換到低4位去,然後分別把a1變成b1,a2變成b2。中間的判斷條件可能有點複雜,懶得想了。

假設有乙個構成物質的最小的位「k」,那麼性質相同的「k」是如何構成性質各異的物質世界?

就如同計算機的0和1最終組成了複雜的檔案和程式,這種有序的組合構成了複雜的事物,水和積木就好比是乙個個擁有特定內容的檔案,無論你把這些檔案如何組合都難以構成任意要求的的檔案和程式,因為它不是構成檔案和程式的最小單位 林光爵 答,由最小單位k 凝聚而成的實體,可能凝聚成不同的形狀,產生的性質就會不同。...

假設有兩個質量大小差不多的類地行星形成雙星系統並且先後產生生命和文明,那麼會怎樣

野生雲妮洛普 額,題主想象力不錯哦,可是得有乙個恆星,因為恆星提供光明啊,總不能黑燈瞎火發展文明吧,有個恆星才有針對生物生存的柯伊伯帶 適合地帶 ps 我管柯伊伯帶叫做恆星的適居地帶,叫習慣了 如此一來,雙星還得圍繞恆星轉,這貌似就是地月日的關係了。所以基本是不可能發展兩個文明呢。 rphoeli ...

假設有乙個無比堅固和龐大的圓盤,圓盤周長為1 1光年,圓盤轉速為每年一圈,那麼圓盤邊緣的線速度為多少

我瞎答一下 大圓盤轉的夠快,到底能不能超光速,要看觀察者的位置和狀態,你感覺它超光速了,但是在光速尺度上,用日常直覺進行思想實驗是錯誤的。你要在圓盤邊緣附近 靜止 觀察圓盤邊緣飛速掠過,測量它的線速度,這和你在軸心觀察是不一樣的。想象另乙個思想實驗,一秒原地轉身半圈,你可以認為自己靜止,整個宇宙轉了...