算法和数据结构概述

目录

  • 第一部分:算法和数据结构
    • 一.算法
    • 二.数据结构
  • 备注

第一部分:算法和数据结构

一.算法

1.算法是独立存在的一种解决问题的方法和思想。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
五大特性:输入(0或多个)、输出(至少一个)、有穷性、确定性、可行性
2.时间复杂度:在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度。时间复杂度的几条基本计算规则:
顺序结构,时间复杂度按加法进行计算;
循环结构,时间复杂度按乘法进行计算;
分支结构,时间复杂度取最大值;
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略。
常见时间复杂度:
算法和数据结构概述_第1张图片
在这里插入图片描述
timeit模块可以测试一段Python代码的执行速度,Timer是测量小段代码执行速度的类,class timeit.Timer(stmt=‘测试的代码’, setup=‘运行所需设置’, timer=):

def test1():
   l = []
   for i in range(1000):
      l = l + [i]
def test2():
   l = []
   for i in range(1000):
      l.append(i)
def test3():
   l = [i for i in range(1000)]
def test4():
   l = list(range(1000))
def test5():
    l = []
    for i in range(1000):
        l.extend([i])

from timeit import Timer

t1 = Timer("test1()", "from __main__ import test1")
print("+ ",t1.timeit(number=1000), "seconds")
t2 = Timer("test2()", "from __main__ import test2")
print("append ",t2.timeit(number=1000), "seconds")
t3 = Timer("test3()", "from __main__ import test3")
print("[i for i in range] ",t3.timeit(number=1000), "seconds")
t4 = Timer("test4()", "from __main__ import test4")
print("list (range) ",t4.timeit(number=1000), "seconds")
t5 = Timer("test5()", "from __main__ import test5")
print("extend ",t5.timeit(number=1000), "seconds")

#结果
+  1.3978183 seconds
append  0.07060319999999987 seconds
[i for i in range]  0.033166999999999947 seconds
list (range)  0.01384799999999986 seconds
extend  0.10645640000000012 seconds

3.列表操作的时间复杂度:
算法和数据结构概述_第2张图片
4.字典操作的时间复杂度:
算法和数据结构概述_第3张图片

二.数据结构

1.数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型,如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。
2.数据结构与算法的关系:数据结构只是静态地描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法:程序 = 数据结构 + 算法。
总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体。
3.抽象数据类型(ADT):Abstract Data Type,指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装。
定义抽象数据类型的目的:把数据类型的表示和运算的实现与程序中的引用隔开,使它们相互独立。
最常用的数据运算有五种:插入、删除、修改、查找、排序。

备注

1.str1.partition(str2)----将str2字符串按照str1进行分割,如果str2包含str1,则返回一个3元的元组,第一个为str1左边的子串,第二个为str1本身,第三个为str1右边的子串。
2.集合之间比较大小实际上是比较它们的包含关系,比如{1,2} 和 {1,2,3} 就是包含关系,{1,2} 和 {2,3,4} 就不是包含关系,即{1,2}<{1,2,3}返回True,而{1,2}<{2,3,4}返回False。

你可能感兴趣的:(数据结构,算法,python)