[閒聊] 關於 conditional statement 的效率

看板C_and_CPP作者 (猜猜偶素隨 ? ^*^)時間15年前 (2010/10/21 22:49), 編輯推噓6(6010)
留言16則, 6人參與, 最新討論串1/1
最近想到一個問題 例如要做一種判斷 '假設'生日好了 每天剛好有一人生日 程式要能自動顯示出當天生日的人名 且一年只有365天 沒有月、星期之分 這樣....在最原始的狀況下 就單純的把日期和所有生日去比較 不分年月 沒有做額外的演算法 '最多'要判斷的次數 if else if 365次 switch 1次 while 365次 for 365次 但是如果用 array table 預先輸入365比對應人名 則可以忽略條件判斷 直接 讓 name = result[date] 這樣一來就省下許多時間了 在這個記憶體如此便宜的時代 array table 似乎是最好的選擇 不曉得大家有沒有什麼不同的看法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.235.154

10/21 22:55, , 1F
你說的沒錯啊。不考慮後續維護的話,比如新增、刪除、修改
10/21 22:55, 1F

10/21 22:55, , 2F
人名,那就用你的方法就好
10/21 22:55, 2F

10/21 23:05, , 3F
有一種說法是把執行機會較多的情況擺在if-else較前面的位置
10/21 23:05, 3F

10/21 23:06, , 4F
因為較後位置的else情況是跑過較多判斷之後才到達的...
10/21 23:06, 4F

10/21 23:06, , 5F
switch不是一次,基本也是從上往下依序判斷.
10/21 23:06, 5F

10/21 23:08, , 6F
同意五樓 而且switch除非compiler看出那是連續數字的case
10/21 23:08, 6F

10/21 23:08, , 7F
否則同樣也會有三、四樓所說的問題
10/21 23:08, 7F

10/21 23:09, , 8F
而如果compiler真的看出來的話 他會幫你轉成類似你說的這個
10/21 23:09, 8F

10/21 23:09, , 9F
array table的形式 所以也不必擔心就是了
10/21 23:09, 9F

10/21 23:09, , 10F
可以用 hash 阿...一次砍一堆不必要的資料
10/21 23:09, 10F

10/21 23:10, , 11F
剛想到要回來推被樓上搶先了XD 其實這正是hash的基本想法
10/21 23:10, 11F

10/21 23:10, , 12F
把不連續的資料化為連續的索引值正是 hash
10/21 23:10, 12F

10/22 03:21, , 13F
不連續 連續? 怎麼怪怪的
10/22 03:21, 13F

10/22 09:34, , 14F
生日這例子真正講的東西我怎覺得比較像是排序
10/22 09:34, 14F

10/22 11:40, , 15F
最簡單的把生日除12就能分12群, 連排序都不用, 就可以
10/22 11:40, 15F

10/22 11:40, , 16F
減少比較次數
10/22 11:40, 16F
文章代碼(AID): #1Cm5Bi26 (C_and_CPP)