C#基本概念:時(shí)間復(fù)雜度,空間復(fù)雜度,遞歸與接口
在開始前先提出二個(gè)C#基本概念:時(shí)間復(fù)雜度與空間復(fù)雜度。
時(shí)間復(fù)雜度是指該算法的運(yùn)行時(shí)間與問題規(guī)模的對(duì)應(yīng)的關(guān)系。時(shí)間復(fù)雜度用T(n)=0(f(n)來表示,其中0表示隨問題規(guī)模n的增大,算法執(zhí)行時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率相同,如果一個(gè)沒有循環(huán)的代碼,算法的執(zhí)行頻度是不會(huì)變的,記作0(1)。當(dāng)算法中有一個(gè)一重循環(huán),那執(zhí)行頻率就會(huì)呈線性增長(zhǎng)0(n*n)...等等。
光看這個(gè)表達(dá)式還是很抽象的,下面來二個(gè)例子:
1、
- i=n;
- x=0;
- while(x< i)
- {
- x=x+1; //這是個(gè)是一重循環(huán),時(shí)間復(fù)雜度為T(n)=0(n)
- }
2、
- int re=0;
- for(int i=0;i< n;i++)
- {
- for(int k=0;k< n;k++)
- {
- re=re+(i*j); //這是個(gè)是二重循環(huán),時(shí)間復(fù)雜度為T(n)=0(n*n)
- }
- }
空間復(fù)雜度是指該算法的運(yùn)行過程中臨時(shí)占用的存儲(chǔ)空間的大小。一個(gè)算法的優(yōu)劣主要從算法的執(zhí)行時(shí)間和所需要占用的存儲(chǔ)空間兩個(gè)方面衡量,算法執(zhí)行時(shí)間的度量不是采用算法執(zhí)行的絕對(duì)時(shí)間來計(jì)算的,因?yàn)橐粋€(gè)算法在不同的機(jī)器上執(zhí)行所花的時(shí)間不一樣,在不同時(shí)刻也會(huì)由于計(jì)算機(jī)資源占用情況的不同,使得算法在同一臺(tái)計(jì)算機(jī)上執(zhí)行的時(shí)間也不一樣,所以對(duì)于算法的時(shí)間復(fù)雜性,采用算法執(zhí)行過程中其基本操作的執(zhí)行次數(shù),稱為計(jì)算量來度量。
下面再次提出兩個(gè)C#基本概念:遞歸與接口
遞歸是指算法調(diào)用自己來完成它的工作。這個(gè)概念無論在算法上還是實(shí)現(xiàn)代碼編寫中都很重要,經(jīng)常大家去面試時(shí),都會(huì)有一條這樣的考題,在深圳這邊,我以前面試過的公司一般都有一條兔子數(shù)列。按我的看法,我在做題時(shí)就是使用遞歸算法來做的。
例:1,1,2,3,5,8,13,21,34,55,89,……求第20位
其實(shí)就是一個(gè)這樣的遞歸關(guān)系: f(n):=f(n-1)+f(n-1)
接口是指類之間交互遵守的一個(gè)協(xié)議。
下面列出常用的接口IComparable,IEnumerable,IEnumerator,ICollection,IDictionary,IList
包插其對(duì)應(yīng)的泛型接口。
下面看一個(gè)接口的例子:
- public interface IBook
- {
- string ShowBook();
- string GetTitle();
- int GetPages();
- void SetPages(int pages);
- }
- public class NewBook : IBook
- {
- public string title;
- public int pages;
- public string author;
- public NewBook(string title, string author, int pages)
- {
- this.title = title;
- this.author = author;
- this.pages = pages;
- }
- public string GetTitle()
- {
- return title;
- }
- public int GetPages()
- {
- return pages;
- }
- public void SetPages(int pages)
- {
- this.pages = pages;
- }
- public string ShowBook()
- {
- return title + "," + author + "," + pages;
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- NewBook nb = new NewBook("A", "James", 200);
- richTextBox1.Text = nb.ShowBook();
- }
這里會(huì)輸出 A,James,200,在NewBook類中不能少寫一個(gè)Ibook已經(jīng)定義的方法,這樣可以對(duì)外完全限定類從外面接入的方法。
這些都是最基礎(chǔ)的C#基本概念,需要牢牢掌握。
【編輯推薦】