您好,登录后才能下订单哦!
这篇文章主要介绍“C#时间复杂度、空间复杂度、递归与接口的基本概念”,在日常操作中,相信很多人在C#时间复杂度、空间复杂度、递归与接口的基本概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#时间复杂度、空间复杂度、递归与接口的基本概念”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
在开始前先提出二个C#基本概念:时间复杂度与空间复杂度。
时间复杂度是指该算法的运行时间与问题规模的对应的关系。时间复杂度用T(n)=0(f(n)来表示,其中0表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,如果一个没有循环的代码,算法的执行频度是不会变的,记作0(1)。当算法中有一个一重循环,那执行频率就会呈线性增长0(n*n)...等等。
光看这个表达式还是很抽象的,下面来二个例子:
1、
i=n; x=0; while(x< i) { x=x+1; //这是个是一重循环,时间复杂度为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); //这是个是二重循环,时间复杂度为T(n)=0(n*n) } }
空间复杂度是指该算法的运行过程中临时占用的存储空间的大小。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量,算法执行时间的度量不是采用算法执行的绝对时间来计算的,因为一个算法在不同的机器上执行所花的时间不一样,在不同时刻也会由于计算机资源占用情况的不同,使得算法在同一台计算机上执行的时间也不一样,所以对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量。
下面再次提出两个C#基本概念:递归与接口
递归是指算法调用自己来完成它的工作。这个概念无论在算法上还是实现代码编写中都很重要,经常大家去面试时,都会有一条这样的考题,在深圳这边,我以前面试过的公司一般都有一条兔子数列。按我的看法,我在做题时就是使用递归算法来做的。
例:1,1,2,3,5,8,13,21,34,55,89,……求第20位
其实就是一个这样的递归关系: f(n):=f(n-1)+f(n-1)
接口是指类之间交互遵守的一个协议。
下面列出常用的接口IComparable,IEnumerable,IEnumerator,ICollection,IDictionary,IList
包插其对应的泛型接口。
下面看一个接口的例子:
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(); }
这里会输出 A,James,200,在NewBook类中不能少写一个Ibook已经定义的方法,这样可以对外完全限定类从外面接入的方法。
到此,关于“C#时间复杂度、空间复杂度、递归与接口的基本概念”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。