面試遇到的程式問題,現在還想不出來 (from MTK)
***許多人的看法與我的一些想法***
部份內容係從 Chip123上轉載, 文章的下半部是我的想法:
這個問題在ptt科技業討論版引起許多
技術性的討論.....
|
參考答案 written by Mr. jackeikuo 如下:
單純把這個迴圈交給比較聰明的 compiler
(比如說 ICC) 編譯, 什麼都沒有.
因為實際上算或不算沒有差別,
compiler 最佳化時會忽略掉.
如果 s 真的有用處, 比如說後面加上一行 printf
如同 printf("5050");
如果上限並非常數, 比如說 for (i=0; i<=n; i++), n
編譯時期未知.,
compiler
latency.7 i0 }
概念類似 s1=0+4+... s2=1+5+... s3=2+6+...
s4=3+7+... s=s1+..+s4,
事實上在某些 CPU 上, INC (++) 比 ADD 1 (+=1)
要慢.'
compiler
i+=1) 就有 gain.
最佳化並沒有必然的原則, 先看編譯出來的
assembly code 才能決定方針.
人腦最大的用處就是設計演算法.
比如說上限非常數時, 很少有 compiler
會套用數學公式.
n
如果再講究一點, n * (n+1) >> 1 會再快一滴滴.
或是把 n 宣告為 unsigned, 最佳化後的結果亦同.
*****************
我的看法同時也有一些人是跟我同樣的想法:
1. 基本上高斯問題的解法應不是被出題者允許使用的,
按題意來看.
2. 隱藏的回答讓我這學經濟的外行人也能有所體會,
答得不錯.
3. 我也相信, 學校"不會教" or "不會想教" 這些;
不過也好, 留點空間給大家畢業後去 explore 探險
也不錯
( 我想這是用樂觀的態度面對悲觀的事實的說法 )
Remark:
如果我是一位應試人員,
其實如果沒辦法提出像樣的解答時,
我的作法是發出一個疑問,
誘導提問人員講出他想要考的是那方面能力,
是演算法的設計,
還是知不知道有何硬體 chips 可作得特別快,
還是這個問題想屬於那一個大問題的一部份?
在能力不足時,
用四面包圍試探性發問來發掘出題者的意圖,
當然出題者也能拒決回答, 會有些可能令人難堪的狀況
也不一定; 但這是沒辦法下的辦法.
當年毛澤東與蔣介石的攻防, 不就是如此嗎?
用鄉村包圍城市
( 因為城市作戰, 非解放軍早期的作戰強項也)
且鄉村區也比較適合當年的共產黨發展.
所以實在在專業上缺了實務經驗時,
繞個彎,
用其它的方式表達自己的才能與發展能量,
也不失為一個方法, 沒辦法時的方法. J
敝人淺見.
