《程式設計之美》之買書問題

2021-06-16 06:15:38 字數 856 閱讀 2349

這兩天剛看《程式設計之美》,裡面的一些演算法有些確實經典,非常的感興趣,很喜歡自己先思考一下,然後看看書上的解析。對於1.4節的買書的問題,原書的解法二我看得不是很明白,而且解法一通過區域性最優解得到全域性最優解,這個肯定是不可取的,以下是我個人對這個問題的解法。

本數    2       折扣   5%

本數    3       折扣  10%

本數    4       折扣  20%

本數    5       折扣  25% 

問題:設計出演算法,能夠計算出讀者所購買的一批書的最低**。

問題分析:

我覺得這個問題可以抽象為n個雞蛋放在5個不同的籃子裡的問題,其實質也就是組合的問題。

當書的數目n<5時,直接按照折扣購買

當書的數目n>5時,情況如下:

依此可以窮舉出每一種組合的情況,對於任意一種情況(i,j,k,m,n)進行分析

先找出是所有書中5種不同的書,如果有則按照5本書折扣價購買

其次找出剩餘書中所有4種書,如果有則按照4本書的折扣價購買

再找出剩餘書中所有3種書,如果有則按照3本書的折扣價購買 

最後在剩餘書中找出所有2種書,如果有則按照2本書的折扣價購買

剩下的書則按照全價購買。

對於書中提到的貪心法的反例,比如買8本書時,可以拆成5+3,折扣為1.55;也可以拆成4+4,折扣為1.6 這種兩種情況組合中都包括,通過選擇乙個折扣最低的可以排除掉第一種情況。

本演算法採用的是窮舉發,在時間複雜度上比較浪費,比如1+1+1+1+2,2+1+1+1+1,1+2+1+1+1,1+1+2+1+1,1+1+1+1+2+1的情況是一樣的,但是演算法中沒有排除,空間複雜度為常量級。

本演算法為確定性演算法,其實還可以考慮非確定性演算法

程式設計之美之買書問題

關於程式設計之美中買書的問題,我困擾了好久。當然,我的數學能力不強,領悟能力又差,所以才困擾了這麼久。不過,在本人的堅持下,終於理解透徹。為了記住這一時刻,更為了免除以後忘記的可能,暫時記錄如下。書中關於證明f y1 1,y2 1,y3 1,y4 1,y5 和f y1 1,y2 1,y3 1,y4,...

程式設計之美 買書問題

今天小夥伴在群裡給出了一道題 分享一道題,有興趣的可以做做哈。假設 冰與火之歌 有五卷,每一捲單獨買是20塊。兩卷連買減5 三卷連買減10 四卷連買減20 五卷連買減25 買相同的卷不打折。比如買兩本卷一,一本卷二,總 是58元。現買了一批書n,計算出它的最低 一看到這道題,瞬間就覺得這麼簡單有什麼...

買書問題 程式設計之美1 4

買書問題,如果一種書籍五冊,單獨買一冊8元,買兩冊不同的打95折,買三冊不同的書籍9折,買四冊不同的書籍8折,買五冊不同書籍75折,問怎麼買書最便宜。比如買2本一冊,2本2冊,2本三冊,1本4冊,1本5冊 那麼最優打折方式就是 分兩次購買,一本一冊,一本二冊,一本三冊和一本四冊,然後就是剩下的書籍 ...