有關"數學"C幾取幾和程式C語言以及一點應用

2012-09-20 5:07 pm
最近我在寫一個程式
它需要大量的時間去跑
大概是這樣:
程式執行後會出現一個數字(ex:20)
這個數字和我主要的演算法將要執行的次數有關
算法: 以20來說,就是( C20取0 + C20取1 + C20取2 + ... + C20取19 )
其總合即是我演算法需要執行的次數

當然這不是在跑空迴圈
所以我舉幾個我測試出來的,方便大家推敲(看能不能找出點規律)
20 大約 10秒
21 大約 15秒
24 大約 100秒
25 大約 400秒
然後我目前在跑43大概12個小時還沒跑出結果
所以希望有人能幫我算一算

這樣龐大的數字 (43) , 在C語言上面需要多久的時間去跑??

(因為需要看看是程式卡住還是他真的還在跑,希望數學高手幫幫忙THX)
更新1:

to 未來: 1:這我知道,程式需要兼顧效能和時間,我有寫另一程式(簡稱A)有達到這效果 而這支程式(簡稱B)是為了要尋找到所謂的最佳結果,也是就是用來對照說 實際上的最佳效率(ex:80%),而我寫的A程式例如是達到78.8%,那我如果拿來和100%比較, 當然是落差很大,所以就想說寫B程式找出最佳的情況是多少,再來做一個比較 2:我在最後的結果上會顯示出時間,至於顯示進度,因為若是加入顯示進度,會使程式執行 時間大大的增長,所以我沒加入進度顯示 3:恩,但我解的問題是所謂的N/P,也就是要達到完全的最佳解,需要2的n次方 感謝你告訴我大概要跑多久

更新2:

額外再問一些,方便的話可以幫我解答一下 那如果說是用大型電腦來執行 時間上會有差異嗎?? (我是用筆電測試的) and這類的運算,線性規劃比較好做麻?? (時間上來說)

更新3:

我是做MPDU配置法 恩 謝謝 我再去試試

回答 (3)

2012-09-20 6:10 pm
✔ 最佳答案
1 程式需要改善演算法。
 
2 執行時間長的程式,應加入進度顯示或剩餘時間顯示。
 
3 程式計算時間成指數倍增長,很難預估確實的時間。
 
 有一些複雜的問題,如破解RSA加密演算法,
 要解超大數字的質因數分解,
 被預估需要數萬年才跑的完,
 後來有人改善了演算法,才大量縮短運算時間。

2012-09-20 10:26:17 補充:
排列組合公式
C n取k = n!/((n-k)!k!)
假設只計算最中間那一個。
 
20!/(10!*10!)=
2432902008176640000/(3628800^2)
=184756
 
42!/(21!^2)
1.4050061177528798985431426062445e+51/
(51090942171709440000^2)
=538257874440

2012-09-20 10:26:29 補充:
取42跟取20的倍數:
538257874440/184756
=2913344.489倍
 
計算 20 大約10秒,
那計算 42 大約10秒*2913344.489
=29133444.89秒
=485557.41分
=8092.62小時
=337.19天
 
約需337.19天!
看來得等到明年才會有答案!

2012-09-20 14:06:23 補充:
1. 顯示進度雖然會花一點時間,
但若以每10秒顯示一次,
應不致於造成嚴重影響。
而且還可以幫忙判斷程式執行狀況。
 
2. 演算法沒有改變的話,用大型電腦來執行,
速度會加快,但運行時間的比例不會改變。
 
3. >這類的運算,線性規劃比較好做麻??
  >我解的問題是所謂的N/P
不知道你的題目是什麼?
NP問題,只能在時間限制下,求近似解。
但仍可以改善程式技巧,
在經由適當的歸納、分類後,
刪除不需要計算的部份。

2012-09-21 13:53:50 補充:
MPDU配置法,用白話來說就是無線網路最佳化。
 
無線網路有即時性的要求,
最佳化所花的時間即使只有1分鐘,也不能接受!
只能選擇快速的近似解!
2012-10-02 2:13 am
抱歉現在才看到


恩我知道
我寫出來的演算法友達到它的限制5ms以內
使用率也達到98~99%
感謝您細心的回答
2012-09-20 6:24 pm
有些算法可以歸納後再計算,如等加、等比級數一樣,是有公式的,不必靠迴圈硬算…

至於程式卡住,學著用thread來做計算,會解決你的問題


收錄日期: 2021-05-04 02:04:48
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120920000016KK01166

檢視 Wayback Machine 備份