- 帖子
- 186
- 主題
- 6
- 精華
- 0
- 積分
- 218
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office 2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2012-11-12
- 最後登錄
- 2014-4-15
|
5#
發表於 2013-2-26 00:29
| 只看該作者
本帖最後由 Bodhidharma 於 2013-2-26 00:31 編輯
回復 4# Hsieh
A式:H2=INDEX($C$2:$C$9,MATCH(1,($A$2:$A$9=MAX(IF($B$2:B$9=G2,$A$2:$A$9,"")))*($B$2:$B$9=G2),0))
B式:H2=INDEX($C$2:$C$9,MATCH($G2&MAX(($B$2:$B$9=$G2)*($A$2:$A$9)),$B$2:$B$9&$A$2:$A$9,0))
簡化一下,差異大概是這樣子:
max函式部分:
A式:max(if(陣列A=目標a,陣列B,"")
B式:max((陣列A=目標a)*(陣列B))
B式比較直觀,而且"*"應該會比"if"有效率,所以B式我覺得比較好
match函式部分:
A式:match(1,(陣列A=目標a)*(陣列B=目標b),0)
B式:match(目標a&目標b,陣列A&陣列B,0)
我覺得A式比較直觀一點(不過那個"1"要轉一個小彎),但是就效率來講,B式應該會好一點(大概會節省計算"陣列A=目標a"和"陣列A=目標a"的時間吧)
改天再改寫看看,我猜大概會省個一半多的時間吧,但是還是很慢(汗)
不過看起來這個東西似乎很難找出比O(n^2)還要低的演算法…(話說演算法這門課在上什麼我幾乎已經忘光了)
感謝版主~ |
|