finish 01-homework

This commit is contained in:
SJ2050
2021-10-16 23:35:28 +08:00
parent 1a2d27dc09
commit 001839394c
12 changed files with 369 additions and 0 deletions
@@ -0,0 +1,64 @@
'''
Author: SJ2050
Date: 2021-10-10 23:34:50
LastEditTime: 2021-10-16 23:23:48
Version: v0.0.1
Description: Solution for homework 2.
Copyright © 2021 SJ2050
'''
from itertools import permutations
def combination(arr, n):
if n == 0:
return [[]]
l =[]
for i in range(0, len(arr)):
m = arr[i]
remLst = arr[i + 1:]
for p in combination(remLst, n-1):
l.append([m]+p)
return l
def heapPermutation(arr, n, process):
if n == 1:
process(arr)
return
for i in range(n):
heapPermutation(arr, n-1, process)
if n & 1:
arr[0], arr[n-1] = arr[n-1], arr[0]
else:
arr[i], arr[n-1] = arr[n-1], arr[i]
if __name__ == '__main__':
nums = [1, 2, 3, 4]
m = 3
count = 0
combs = combination(nums, m)
def printAndCount(arr):
global count
count += 1
for i in range(len(arr)):
print(f'{arr[i]}', end='')
print('')
print('3-digit nums:')
for c in combs:
heapPermutation(c, m, printAndCount)
print('-'*12)
print(f'Total count: {count}')
# 从一列数中取出三个元素组成三位数的算法复杂度分析:
# 首先是组合分析,从一列数中取出三个数的组合个数为n*(n-1)*(n-2)/6,算法时间复杂度为O(n^3).
# 接着,对每队组合进行排列,排列算法选用的是heap算法,其时间复杂度为O(n!).
# 故总的时间复杂度为: O((n^3)*(3!)) --> O(n^3)