關於程式設計的基本原則
程式設計往往和演算法的時間複雜度和空間複雜度緊密相連,優化演算法的時間複雜度和空間複雜度使程式設計的根本目的之一。
演算法的時間複雜度是指執行程式所需要的時間,演算法的空間複雜度是指執行程式所需要的儲存空間。一般來說,在任何程式設計競賽中,時間複雜度往往比空間複雜度容易出問題,所以我們在設計程式時,時間複雜度是我們首要考慮的問題。
我們學習程式設計主要是為了計算機的高效率,如果乙個演算法因為執行次數太多而導致其執行時間遠高於其它的演算法,那麼這樣的演算法就是失敗的演算法。同理,我們在一定的記憶體空間裡面,要想執行更多的程式,就必須得壓縮每乙個演算法執行程式時所需要的儲存空間。
一般來說,在任何程式設計競賽中,時間複雜度往往比空間複雜度容易出問題,所以我們在設計程式時,時間複雜度是我們首要考慮的問題。在執行次數較少時,因為計算機系統處理的迅速,可能看不出什麼差別,但是當執行次數上公升到105
、106
、107
10^5、10^6、10^7
105、10
6、10
7次時,我們就可能會遇到執行超時的問題。
在執行演算法的過程中,我們可以認定每執行一步所需要的時間都是1,那麼,由於迴圈體的存在,迴圈n次的程式就執行了n∗m
n*mn∗
m次,此處m為每個迴圈體裡面的操作次數。在設計程式的過程中,為了避免超時問題,我們一般都要儘量減少雙重及以上的迴圈,這放在程式設計競賽裡面基本上是一定會超時的。而優化演算法的時間複雜度,就是我們運用所學知識的時候了。
除了時間複雜度和空間複雜度之外,還需要考慮的就是演算法的簡潔性和易讀性。c++和c語言都是以乙個英文分號作為一句**的結束,或者是花括號作為**塊的結束。因此,在編寫程式時極大地增加了程式設計師的自由性。也正是因此,發展出了許多不同風格的編寫**方式,但是也就造成了a編寫的**來給b修改就造成了巨大的困難,不利於**的推廣利用。
在此推薦我的寫**的方式。
例子如下:
#include
using
namespace std;
void
solve()
;int
main()
}while(10
)solve()
;return0;
}void
solve()
讓寫出來的**顯得乾淨,整潔也是優秀的程式設計師所需要做的事情,在網上看見的部分程式設計師寫的**,重複累贅部分很多,同時**邏輯也有需要提高的地方,如果寫**的思路清晰,那麼寫出來的**給別人讀也會是十分清晰的,同時也便於他人維護,當然,在寫**的時候加上自己的注釋也不失為一種好辦法。
另外,部分人在寫**的時候,不管需不需要,每次都先包含很多常用的標頭檔案,於是乎就出現了程式一大塊,**開頭十幾行都是#include<>
,個人推薦還是按需選擇標頭檔案,這樣可以讓自己的**顯得整潔,而且可以加深對使用的函式的理解,免得到時候需要找乙個標頭檔案函式的時候都不知道它在哪個標頭檔案裡面。
建模的一些基本原則
建模的基本原則,在建模的過程中需要加以考慮,避免以後遇到大坑措手不及,而不是簡單的為了建模而建模。主要從資料業務特性和訪問特性兩個角度來考慮 將業務相近或者相關 粒度相同的資料設計為乙個邏輯或者物理模型 將高概率同時訪問的資料放一起 將低概率同時訪問的資料分開儲存。核心模型包括的宇段支援常用的核心業...
測試的一些基本原則
軟體測試的原則尚沒有標準的說法,大多是經驗之談,一般有下面幾條可作為測試的基本原則。1 所有的測試都應追溯到使用者需求。2 應當把 盡早地和不斷地進行軟體測試 作為軟體測試者的座右銘。3 設計時應完成測試計畫,詳細的測試用例定義可在設計模型確定後開始,測試可在 產生之前進行計畫和設計。4 paret...
成為程式設計高手的一些基本原則
不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基本原則是可以遵循的。1.紮實的基礎。資料結構 離散數學 編譯原理,這些是所有電腦科學的基礎,如果不掌握他們,很難寫出高水平的程式。據我的觀...