看板 C_and_CPP 關於我們 聯絡資訊
最近想到一個問題 例如要做一種判斷 '假設'生日好了 每天剛好有一人生日 程式要能自動顯示出當天生日的人名 且一年只有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
purpose:你說的沒錯啊。不考慮後續維護的話,比如新增、刪除、修改 10/21 22:55
purpose:人名,那就用你的方法就好 10/21 22:55
yauhh:有一種說法是把執行機會較多的情況擺在if-else較前面的位置 10/21 23:05
yauhh:因為較後位置的else情況是跑過較多判斷之後才到達的... 10/21 23:06
yauhh:switch不是一次,基本也是從上往下依序判斷. 10/21 23:06
LPH66:同意五樓 而且switch除非compiler看出那是連續數字的case 10/21 23:08
LPH66:否則同樣也會有三、四樓所說的問題 10/21 23:08
LPH66:而如果compiler真的看出來的話 他會幫你轉成類似你說的這個 10/21 23:09
LPH66:array table的形式 所以也不必擔心就是了 10/21 23:09
loveme00835:可以用 hash 阿...一次砍一堆不必要的資料 10/21 23:09
LPH66:剛想到要回來推被樓上搶先了XD 其實這正是hash的基本想法 10/21 23:10
LPH66:把不連續的資料化為連續的索引值正是 hash 10/21 23:10
pichubaby:不連續 連續? 怎麼怪怪的 10/22 03:21
TeaEEE:生日這例子真正講的東西我怎覺得比較像是排序 10/22 09:34
loveme00835:最簡單的把生日除12就能分12群, 連排序都不用, 就可以 10/22 11:40
loveme00835:減少比較次數 10/22 11:40