不拘一格編程序之一
循環打印算法
做者:朱雲翔
小說中常常有人說某某將領打仗天馬行空,不拘一格,讓敵人防不勝防,好比《×××》中的李牧;好比《大唐雙龍傳》中的寇少。
編程序時也要有怎樣的思想,不能被條條框框所束縛,好比這個例子:
【例1】編寫一個函數void fun(int t),要求在屏幕上打印t個「*」號,其中t的長度不會大於50。
【設計1】:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
以上方法雖然笨拙,可是時間複雜度爲O(1),快!這是犧牲空間換取時間。
固然,編寫設計一的人員通常很少,絕大多數人使用設計2。
【設計2】:
![]() ![]() ![]() ![]() ![]() ![]()
以上算法是最正宗的算法!優勢是:程序至關簡單,思路至關清晰。缺點是時間複雜度爲O(t)。
【設計3】:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
乍一看,真麻煩,可是時間複雜度O(1)。有人說,那前面的memcpy等代碼就不耗費時間了嗎?答曰:一、memecpy的時間花費遠遠printf等屏幕顯示類函數底。二、就算是空循環體的for循環再編譯後也會產生若干行表明,比memcpy要慢。
可是這裏增長了p和buf的存儲空間。
【設計4】:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]()
與設計3相似,但與其相比,減小了多餘的空間浪費,可是去增長了malloc內存分配操做和memset內存設置操做,相對增長了時間耗費。時間複雜度O(1)。
編寫軟件不拘一格,並非要你編什麼程序都劍走偏鋒,而是說當走普通的路不通的時候,或者很是難走時,別完了試試其它的路。就像以上算法,各自有其優缺點,都有其本身的適用範圍,切勿只用一種包打天下,也切勿爲了眩耀而使用不適用的算法。
|