前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈时间复杂度/空间复杂度

漫谈时间复杂度/空间复杂度

作者头像
SRE运维实践
发布2019-07-08 13:24:18
7240
发布2019-07-08 13:24:18
举报
文章被收录于专栏:SRE运维实践SRE运维实践

序言

照见五蕴皆空,度一切苦厄。。。

碰到一个问题,总是心心念,因为我不信一个问题没有解决之道。。。只是时间,地点,人物不合适,所以导致无法解决。。。接口总比方法多。

复杂度

依稀记得在某个时刻,有人问,在进行编程的时候,你选择各种数据结构的依据是什么。。。为什么要选择list,而不选择tuple,为何你要选择dict,而不选择一个json,或者自己实现一个class。。。如果是你,你怎么作答???

最近闲来无事,有一本书买了很久,然而并没有看,因为文绉绉的,理论性太强,看的心烦意乱情迷。。。数据结构与算法。。。

最近一不小心,又看了一片代码:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

代码语言:javascript
复制
Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

实现代码如下所示:

public int[] twoSum(int[] nums, int target) {

for (int i = 0; i < nums.length; i++) {

for (int j = i + 1; j < nums.length; j++) {

if (nums[j] == target - nums[i]) {

return new int[] { i, j };

}

}

}

throw new IllegalArgumentException("No two sum solution");

}

不是很懂java,所以只理解其意思,在其中,表达了两层意思:第一种是时间复杂度为O(N**N);第二种是空间复杂度为O(1)。

复杂度,有多复杂。。。我们生来就是为了和各种复杂度作斗争,太简单的没挑战,太复杂的玩不动。。。所以简单就是美,能将复杂的东西进行简单化,也是相当不错的。

花了几个小时,沉迷到理论之中。。。差点出不来,忍不住要全部看完。。。

时间复杂度,就是运行一次需要花费的时间,一般N表示整个数据的长度,是否和数据的长度有关,例如O(N)就是线性关系,所谓的O(1)可以认为是常量关系,简单的理解就是:如何和长度有关,那么就是O(N),例如循环一次,在上面的代码中,循环了两次,所以时间复杂度为O(N**N)。

空间复杂度,就是运行一次的过程中,占用的存储空间的大小度量,例如在进行一个list操作的时候,那么空间复杂度为O(1),当在进行修改删除操作的时候,可能需要新建一个新的存储空间来存储新的队列,从而空间复杂度为O(N)。

空间复杂度和时间复杂度,可以作为选择数据类型的评判标准之一。

对于一种数据结构来说,有各种各样的时间复杂度,对于python的list实现,当你查询一个元素的时候,时间复杂度是O(1),常量时间;但是当你进行加入元素,删除元素的时候,时间复杂度是O(N),对于特例在尾部增加和删除的操作来说,时间复杂度又是O(1)。

对于一个程序来说,编程语言提供了最基础的类型实现,例如python里面的str,int,float,list,tuple等,在表达一个数据结构的时候,就有各种选择,可以选择不同的方式,而当你选定了数据结构,那么你程序最基本的运行时间就大概已经定型。

类class,其实也是一种数据结构,基本属性,加上一些方法,方法是对自身的一些操作,所以在类里面,总是会有self,那么为什么有的方法没有self,有的方法都是用cls。。。

为什么会产生静态方法,所谓的staticmethod。。。辅助方法,当一个类需要一些方法的时候,但是操作的又不是自身,那么就可以使用静态方法,作为一个辅助方法而存在。

为什么又会有类方法,所谓的classmethod。。。Emmm,只是在一个命名空间之内,可以继承等操作,例如统计这个类创建了多少个。。。

风言风语

攘外必先安内。。。内乱还未平息,外面的市场已经失去先机。。。眼瞎了解一下。。。

帮我是情分,不帮我才是本份。。。帮我是因为你的素质高,帮我也是因为看得起我。。。其实所有的道理都相通。

广告,很多人看东西只看表面。。。所谓的各种滤镜,美颜。。。 太年轻。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档