面試遇到的程式問題,現在還想不出來 (from MTK)


 


 


***許多人的看法與我的一些想法***


 


部份內容係從 Chip123上轉載, 文章的下半部是我的想法:


 







這個問題在ptt科技業討論版引起許多


 


技術性的討論.....



各位大大也是工程背景出身,這個問題你會如何解決呢?



 

參考答案 written by Mr. jackeikuo  如下:


 


單純把這個迴圈交給比較聰明的 compiler


 


(比如說 ICC) 編譯, 什麼都沒有.




 

因為實際上算或不算沒有差別,


 


compiler 最佳化時會忽略掉.
                                                                                
如果 s 真的有用處, 比如說後面加上一行 printf


 




那麼 compiler 最佳化之後的 assembly code

 


如同 printf("5050");
                                                                                


如果上限並非常數, 比如說 for (i=0; i<=n; i++), n


 


編譯時期未知., 




compiler

可能會 unroll 利用多個 register 縮短

 


 latency.7 i0 } 




 

概念類似 s1=0+4+... s2=1+5+... s3=2+6+...


 


s4=3+7+... s=s1+..+s4, 
                                                                                
事實上在某些 CPU , INC (++) ADD 1 (+=1)


 


要慢.' 




compiler

太笨的話, 光是改成 for(i=0; i<=100;

i+=1) 就有 gain.
                                                                                


最佳化並沒有必然的原則, 先看編譯出來的


 


assembly code 才能決定方針.




許多最佳化 compiler 都已經做好了,

 


人腦最大的用處就是設計演算法.
                                                                               


比如說上限非常數時, 很少有 compiler


 


會套用數學公式.




n

夠大時 (乘法多半費時), n * (n+1) / 2 會佔優勢.
                                                                               
如果再講究一點, n * (n+1) >> 1 會再快一滴滴.

 


 



或是把 n 宣告為 unsigned, 最佳化後的結果亦同.


 


 


*****************


 


我的看法同時也有一些人是跟我同樣的想法:


 


1. 基本上高斯問題的解法應不是被出題者允許使用的,


 


   按題意來看.


 


2. 隱藏的回答讓我這學經濟的外行人也能有所體會,


 


   答得不錯.


 


3. 我也相信, 學校"不會教" or "不會想教" 這些;


  


   不過也好, 留點空間給大家畢業後去 explore 探險


   


   也不錯



   (
我想這是用樂觀的態度面對悲觀的事實的說法 )




Remark:


 


如果我是一位應試人員,

 


其實如果沒辦法提出像樣的解答時,


 


我的作法是發出一個疑問,


 


誘導提問人員講出他想要考的是那方面能力,


 


是演算法的設計,


 


還是知不知道有何硬體 chips 可作得特別快,


 


還是這個問題想屬於那一個大問題的一部份


 


在能力不足時,


 


用四面包圍試探性發問來發掘出題者的意圖,


 


當然出題者也能拒決回答, 會有些可能令人難堪的狀況


 


也不一定; 但這是沒辦法下的辦法.


 


 


當年毛澤東與蔣介石的攻防, 不就是如此嗎?


 


用鄉村包圍城市


 


( 因為城市作戰, 非解放軍早期的作戰強項也)




所以只好 "逃到" 廣大的鄉村區去作戰,

 


且鄉村區也比較適合當年的共產黨發展.


 


所以實在在專業上缺了實務經驗時,


 


繞個彎,


 


用其它的方式表達自己的才能與發展能量,


 


也不失為一個方法, 沒辦法時的方法. J


 


 


敝人淺見.