2020年6月17日——Python
1.递归的特点
(1)“先纵后横”,比如在遍历一个表格时,先纵向进行遍历,当遍历到一个点时,以该点为起点,进行横向遍历
(2)要有进口,即要定义起始点
(3)要有出口,即递归函数中要有结束条件
(4)当数据过多时,可以使用动态递归、状态法等
2.全排列
(1)在C++中,全排列结构为:
do{
...
}while(next_permutation(s.begin() , s.end()));
其中,next_permutation(start,end):求当前排列的下一个排列
拓展:在C++中,**_find():在一个字符串中查找一个指定的单个字符或字符数组,如果找到,就返回首次匹配的开始位置;如果没有查找到匹配的内容,就返回String::npos
(2)在Python中,全排列使用的是itertools中的:combinations和permutations:
>>>import itertools
>>>s="abc"
>>>itertools.combinations(s,len(s))
[('a','b','c')]
>>>itertools.permutations(s,len(s))
[('a','b','c'),('a','c','b'),('b','a','c'),('b','c','a'),('c','a','b'),('c','b','a')]
(3)循环排列,也叫圆排列、环排列等。指从n个不同元素中取出m(1<=m<=n)个不同的元素排列成一个环形,既无头也无尾。两个循环排列相同,当且仅当所取元素的个数相同,并且元素取法一致,在环上的排列顺序一致。
e.g. 从m个元素里选出n个元素的循环排列,设它的全排列种数为x:
因为n个元素的循环全排列的种数为(n-1)!
所以
其中:
3.Python中的字典,可以用元组tuple作为键(即Key),但是列表不行
4.字典的取值推荐使用get()直接取
e.g. >>>a={1:2}
>>>a.get(1)
2
>>>a.get(2) #不存在时,返回None
None
>>>a.get(2,3) #此时,若键(即Key)为2不存在或者是为空的时候,则输出3
3
5.若将一个数据规模很大的数据,进行时间性能上的优化,只有两种办法:
(1)使用折半查找
(2)转换为指数,使用快速幂
6.在程序中,计算分类的性能,使用的是“+”;计算分步的性能,使用的是“*”
1 for i in range(10):#分类,时间性能为10( 即O(n)) 2 print(i) 3 4 for i in range(10): 5 for j in range(10):#分步,时间的性能为100( 即O(n*n)) 6 print(i)
7.tuple(1,2)是不可以生成元组的,(1,2)是可以生成元组的
8. 0 and 1 = 0
非 0 数 and 1 = 1
任何字符 and 1 = 1 ( '0' and 1=1)
'' and 1 = '' (''为空字符串)
9. 矩阵的相乘,为三重循环(矩阵都是i行j列的情况下)
代码为:
1 ''' 2 两个都是i行j列的矩阵进行相乘,得出来的矩阵,也是i行j列 3 ''' 4 class MultipleMatrix: 5 def multipleMatrix(self,A,B): 6 result=[] #结果矩阵 7 for i in range(len(A)):#对结果矩阵进行初始化,全部初始化为0 8 a=[] 9 for j in range(len(A[0])): 10 b=0 11 for k in range(len(A[0])): 12 b+=A[i][k]*B[k][j] 13 a.append(b) 14 result.append(a) 15 return result 16 17 if __name__=="__main__": 18 matrixA=[[1,2,3],[4,5,6],[7,8,9]] 19 matrixB=[[1,1,1],[1,1,1],[1,1,1]] 20 r=MultipleMatrix().multipleMatrix(matrixA,matrixB) 21 for i in r: 22 print(i)
运行结果为: