題目描述:有31,-41,59,26,-53,58,97,-93,-23,84十個數。sum(n,m)表示從第n個數到到第m個數的和。例如:sum(2,3)=-41+59=18。問:最大的和是多少?對應的n和m是多少?
這個題目並不難,實現的方法多種多樣。最壞的演算法,遍歷所有的情況,求出最大和。
我在這兒提乙個演算法的思路,不是最優的,主要是講解這個演算法的。
模擬生物演算法(謝謝裝配腦袋指正,這應該是遺傳演算法)。
根據題目,構造生物s,生物s有三個屬性n、m、v。n表示開始的下標,m表示結束的下標,和題目中的定義一樣。v表示從第n個數到第m個數的和,v和n、m是相關的。因此,可以用s(n,m)表示這個生物。
先期構造10個這樣的生物。稱為第一代。
生物有兩個特性,繁衍性和變異性。
繁衍性:生物s1(n1,m1)和生物s2(n2,m2)繁衍的後代為生物s3(n1,m2)和生物s4(n2,m1)
變異性:生物s1(n1,m1)產生變異,得到s2(n2,m1)或者是s2(n1,m2)
第一代生物通過繁衍和變異得到10個後代(繁衍和變異的比例自定)。這樣一共有20個生物。然後這20個生物採用優勝劣汰的方法,保留10個v最大的生物,淘汰10個生物。這稱為自然選擇的一代。
模擬大自然的自然選擇,通過初期的10個生物,經過5代的自然選擇,基本上就能得到最優解。
模擬生物演算法(遺傳演算法),就是利用繁衍和變異以及優勝劣汰,保留最優的生物,得到最優解。在某些實際問題中,能達到不錯的效果。不過模擬生物演算法(遺傳演算法)不能保證一定能在最優解收斂,但基本上能保證在區域性最優解上實現收斂。
本題用模擬生物演算法(遺傳演算法)並不是最合適,我只是利用這道題簡單介紹模擬生物演算法的基本思想。
歡迎各位提出本題的最優演算法,空間上的最優演算法、時間上的最優演算法。
一道關於拆分思路的演算法題
2012 04 15 wcdj 1912.04.14 titanic,100 years later 題目 兩個陣列a n b n 其中a n 的各個元素值已知,現給b i 賦值,b i a 0 a 1 a 2 a n 1 a i 要求 1.不准用除法運算 2.除了迴圈計數值,a n b n 外,不...
記一道毫無思路的演算法題
今天賢內給了我一道很實際的演算法題,把我徹底難住了,實在想不出來,於是寫此博文以記之。背景是這樣的,現在有乙個付款明細的excel,裡面有為哪個發票,哪個公司應付多少錢的明細,明細資料是62條,現在知道我們已經付出的金額為sum,請問到底哪些發票是已付款的。這是62條明細資料 653165.00 3...
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...