《Python算法教程》笔记

本文是《Python算法教程》的笔记,涵盖了图与树的基础知识,如图论基础、无环图与森林的概念,以及算法性能分析。探讨了列表和动态数组的性能差异,渐近记法的重要性,以及Python中timeit和cProfile模块的使用。此外,还介绍了图的邻接列表和邻接矩阵的实现方式。
摘要由CSDN通过智能技术生成

第一章 引言

#倒序输出
count = 10
nums = []
for i in range(count): #由小到大开始整数计数,默认从0开始
	nums.append(i)  #添加,添加到末尾
nums.reverse() #反转
print(nums)
#-----------------------------------------------------------
count = 10
nums = []
for i in range(count):
	nums.insert(0, i) #插入,将i插入到第0个位置/首位
	print(nums)

第一段代码效率会更高

习题1-2
判断字符变位,例如debit card和bad credit
解答:变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。aabbdd和abccab就是一对变位词。
利用collections.Counter

from collections import Counter
num1 = []
num2 = []
word1 = 'debit card'
word2 = 'bad credit'
for i1 in word1:
	nums1 += i1
for i2 in word2:
	nums2 += i2
c = Counter(nums1) #计数功能,返回字典形式
d = Counter(nums2)
if c == d:
	print(True)
else:
	print(False)

第二章 基础知识

黑盒子专栏之list
python列表:数组——它不是由若干个独立的节点相互引用而成的,而是一整块单一连续的内存区块。可直接计算出目标元素在内存中的位置。
其他语言的列表:链表(单向链表/双向链表)——通常是由一系列节点来实现的,其每个节点(尾节点除外)中都有一个指向下一节点(上一节点)的引用。必须从头开始遍历才能找到某个元素所在的位置。
而对于insert插入操作而言,要将新元素插入到列表的首位,这种操作对于链表来说没一次插入都是一样的,但是对于数组而言,每次插入一个元素,都要将数组中所有的元素向右移动一个位置,把首位空出来,再进行插入,甚至在必要时,可能还需要将这些列表元素整体搬到一个更大的数组中。
所以append操作通常会采用一种被称为动态数组或向量的特定解决方案。
渐近记法——时间复杂度
分析算法和数据结构的重要工具,核心思想是提供一种资源表示形式,分析计算时所需要的资源(指时间,有时包括内存),例如我们可以将一个程序所需要的运行时间表示为T(n)=2.4n+7,忽略单位。
渐近记法使用的是一组由希腊字母构成的记号体系,分别是大O,Ω,θ。
大O表示渐近上界,Ω表示渐近下界,θ表示他们的交集。
O和Ω是相互可逆的,如果f属于O(g),那么g就属于Ω(f)
当n>n0时(n0是自然数),T(n)是小于cn2的,所以T(n)属于O(n2) #n2表示n的平方
交通规则
表2-1
常数级<对数级<线性级<线性对数级<平方级<立方级<多项式级<指数级<阶乘级
渐近表达式代表的都是一个函数集
简单规则
θ(n2+n3+n4+42)=θ(n4) #四次方 加法运算,以最高阶数为准
θ(4.2nlg n)=θ(nlg n) #乘法运算,常数因子忽略
福利规则
θ(f)+θ(g)=θ(f+g)
θ(f)·θ(g)=θ(f·g)


squares = [x**2 for x in seq]
#for x in seq:
#	square = x**2
#	squares.append(square)
#得出se
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值