关于时间复杂度和空间复杂度的一些想法

来源:互联网 发布:中国医疗人工智能公司 编辑:程序博客网 时间:2024/05/17 03:52

        在学C语言编程的时候,相信很多朋友都不会涉及时间复杂度和空间复杂度的概念,我在学谭浩强的C的时候,也不曾有过关于复杂度的概念,后来学习了数据结构,其中里面的几种结构,才真正对复杂度有了认识,原因是C语言编程,即使是ACM程序题,也未必有严格的时间和空间限制,一个小小的程序,少则30行,多则6、70行,恐怕也就0.几秒,但是一旦当程序的功能逐渐增多,需要解决的问题逐渐细化,而使程序变得异常庞大时,一旦运行起来,就不是几秒的问题,更何况使用者还不是我们这些亲生的父母!想想那些用户们如何受得了!

拿冒泡排序来说,时间复杂度是n的平方,即使最理想的情况下, 也只是可怜的n,所以可见,一个好的算法对一个问题的解决是多么的重要!

        空间复杂度说的应该是内存的问题,从内存的角度来分析和看问题,一个程序的好坏,程序占用的内存的资源的优劣,看它内存的申请情况,内存是否得到有效的利用。

比如分配内存有两种方法:1、直接定义变量,因为定义变量的同时就申请了内存空间;2,malloc,这是在堆内存中申请,当然因为不同的变量,其空间的性质是不一样的,根据内存的实际情况,有栈 堆  文字常量区  静态存储区,虽然都是内存,但每一个的使用又都是不一样的,可自己看书

我对空间复杂度的理解就是对内存的使用效率

        这两个概念是一个程序好坏的判断指标吧,当然,不一定两个都好才是最优的,这要看用户的需求,可能用户需要程序的时间尽可能短,那就有可能牺牲空间复杂度换来时间复杂度,有的可能刚好相反。比如数组,就是典型的以时间换空间的结构,而链表则是典型的以空间换时间的数据结构。

注意:以上仅是我个人在闲人一枚的时候,发发吐沫,可能会有表述和知识上的错误认识,望路过的朋友给予指点和批评,也希望和你探讨和交流编程

0 0
原创粉丝点击