問答題
慮下面的貨幣兌付問題:在面值為(v1, v2, …, vn)的n種貨幣中,需要支付y值的貨幣,應(yīng)如何支付才能使貨幣支付的張數(shù)最少,即滿足最小(xi是非負(fù)整數(shù))。設(shè)計(jì)動(dòng)態(tài)規(guī)劃算法求解貨幣兌付問題,并分析時(shí)間性能和空間性能。
Ackermann函數(shù)A(m, n)的遞歸定義如下: 設(shè)計(jì)動(dòng)態(tài)規(guī)劃算法計(jì)算A(m, n),要求算法的空間復(fù)雜性為O(m)。
對(duì)于圖6.26所示多段圖,用動(dòng)態(tài)規(guī)劃法求從頂點(diǎn)0到頂點(diǎn)12的最短路徑,寫出求解過程。
計(jì)算兩個(gè)正整數(shù)n和m的乘積有一個(gè)很有名的算法稱為俄式乘法,其思想是利用了一個(gè)規(guī)模是n的解和一個(gè)規(guī)模是n/2的解之間的關(guān)系:n×m=n/2×2m(當(dāng)n是偶數(shù))或:n×m=(n-1)/2×2m+m(當(dāng)n是奇數(shù)),并以1×m=m作為算法結(jié)束的條件。例如,圖5.15給出了利用俄式乘法計(jì)算50×65的例子。據(jù)說十九世紀(jì)的俄國農(nóng)夫使用該算法并因此得名,這個(gè)算法也使得乘法的硬件實(shí)現(xiàn)速度非???,因?yàn)橹皇褂靡莆痪涂梢酝瓿啥M(jìn)制數(shù)的折半和加倍。請(qǐng)?jiān)O(shè)計(jì)算法實(shí)現(xiàn)俄式乘法。
下面這個(gè)折半查找算法正確嗎?如果正確,請(qǐng)給出算法的正確性證明,如果不正確,請(qǐng)說明產(chǎn)生錯(cuò)誤的原因。
循環(huán)賽日程安排問題。設(shè)有n=2k個(gè)選手要進(jìn)行網(wǎng)球循環(huán)賽,要求設(shè)計(jì)一個(gè)滿足以下要求的比賽日程表: (1)每個(gè)選手必須與其他n-1個(gè)選手各賽一次; (2)每個(gè)選手一天只能賽一次。