算法时间复杂度评估
来源:互联网 发布:windows配置hadoop 编辑:程序博客网 时间:2024/05/18 19:39
Implementing An Algorithm
- 实现一个查找算法:我们采用线性查找,线性查找是查找算法的一个实现方法,它采用循环遍历每个元素直到找到匹配元素为止:
- 本算法提供了一个数据集nba:2013年的NBA球员信息,第一列是球员名字。我们尝试找到Kobe打的位置(SG).
# When Kobe is found in the dataset, store his position in Kobe_positionkobe_position = ""# Find Kobe in the datasetkobe_position = ""for row in nba: if row[0] == "Kobe Bryant": kobe_position = row[1]
Importance Of Modularity And Abstraction
模块化程序设计即模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。
在计算机科学中,抽象化(英语:Abstraction)是将数据与程序,以它的语义来呈现出它的外观,但是隐藏起它的实现细节。抽象化是用来减少程序的复杂度,使得程序员可以专注在处理少数重要的部分。一个电脑系统可以分区成几个抽象层(Abstraction layer),使得程序员可以将它们分开处理。
- 比如sum()函数,我们并不知道这个函数是怎么实现的,我们只需要知道它是干什么的,这就是抽象。并且它节约了我们的时间,不用每次都自己手动计算求和,这就是模块。
Linear Search Revisited
- 设计一个函数可以轻松地找到某个球员的年龄:
# player_age returns the age of a player in our nba datasetdef player_age(name): for row in nba: if row[0] == name: return row[2] return -1allen_age = player_age("Ray Allen")durant_age = player_age("Kevin Durant")shaq_age = player_age("Shaquille O'Neal")
Time Algorithms
通常求解一个问题的算法有很多,选择算法的一个常见的标准就是时间复杂度
计算时间复杂度的过程,常常需要分析一个算法运行过程中需要的基本操作,计量所有操作的数量。通常假设一个基本操作可在固定时间内完成,因此总运行时间和操作的总数量最多相差一个常量系数。有时候,即使对于大小相同的输入,同一算法的效率也可能不同。因此,常对最坏时间复杂度进行分析。最坏时间复杂度定义为对于给定大小n的任何输入,某个算法的最大运行时间,记为T(n)。通常根据T(n)对时间复杂度进行分类。比如,如果对某个算法有T(n) = O(n),则称其具有线性时间。如有T(n) = O(2^n),则称其具有指数时间。若对于一个算法,T(n)的上界与输入大小无关,则称其具有常数时间,记作O(1)时间。
在考虑常数时间复杂度的时候要注意一种陷进:就是內建函数的时间复杂度不可忽略:
很容易认为上面这段代码的时间复杂度是O(1),但实际上Python中在判断milk是否在fridge_items这个句子调用了一个内建函数,而这是个查找的过程,是依赖于数组的长度的,不是常数时间。
# Find the length of a listdef length(ls): count = 0 for elem in ls: count = count + 1length_time_complexity = "linear"# Check if a list is empty -- Implementation 1def is_empty_1(ls): if length(ls) == 0: return True else: return Falseis_empty_1_complexity = "linear"# Check if a list is empty -- Implementation 2def is_empty_2(ls): for element in ls: return False return Trueis_empty_2_complexity = "constant"
- 算法时间复杂度评估
- 算法性能评估-时间复杂度
- 算法性能评估-时间复杂度
- 评估算法的“时间复杂度”与“空间复杂度”
- 教你如何评估时间空间复杂度?
- 算法 时间复杂度|空间复杂度
- 算法 时间复杂度|空间复杂度
- 算法 时间复杂度|空间复杂度
- 算法时间复杂度&空间复杂度
- 算法-时间复杂度、空间复杂度
- 算法复杂度--时间复杂度,空间复杂度
- 算法的时间复杂度
- 算法时间复杂度
- 算法的时间复杂度
- 算法的时间复杂度
- 算法的时间复杂度
- 算法的时间复杂度
- 算法的时间复杂度
- 文件夹浏览(SHBrowseForFolder)
- Tab实现之ViewPager(一)
- Android中线程那些事
- iOS CoreBluetooth 教程
- MFC选择目录SHBrowseForFolder
- 算法时间复杂度评估
- 双向队列 小练
- mysql安装教程
- Sublime text 3最新版破解方法
- C++面向对象(二)——继承
- LinkedList详解
- STL list双向链表容器
- executeQuery 、execute与executeUpdate区别
- 控制器相关(控制器的创建 跳转 导航控制器 等)