패키지
# MyList.py
"""
Project: MyList.py Package
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added genRandList, printListSample, shufflelist
"""
import random
def genRandList(L, n):
for i in range(n+1):
Rand = random.randint(0, n)
while Rand in L:
Rand = random.randint(0, n)
else:
L.append(Rand)
return L
def printListSample(L, n, per_line, sample_lines):
last_list = n % 20
cnt = 0
for i in range(per_line * sample_lines):
if cnt == per_line * sample_lines:
break
else:
cnt += 1
print("{:7}".format(L[i]), end = ' ')
if cnt % per_line == 0:
print('')
print('\n ---------------------------------------------------------------------------------- ')
cnt = 0
if n % 20 == 0:
for i in range(n-(per_line * sample_lines), n):
if cnt == per_line * sample_lines:
break
else:
cnt += 1
print("{:7}".format(L[i]), end = ' ')
if cnt % per_line == 0:
print('')
else:
for i in range(n-last_list, n):
if cnt == per_line * sample_lines:
break
else:
cnt += 1
print("{:7}".format(L[i]), end = ' ')
if cnt % per_line == 0:
print('')
def shuffleList(L):
random.shuffle(L)
return L
#MySortings.py
"""
Project: MySortings.py Package
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added selectionSort, mergeSort
"""
def selectionSort(L):
for i in range(len(L) - 1):
index = i
for j in range(i + 1, len(L)):
if L[j] < L[index]:
index = j
L[i], L[index] = L[index], L[i]
def mergeSort(L):
if len(L) > 1:
middle = len(L) // 2
L_left = L[:middle]
L_right = L[middle:]
mergeSort(L_left)
mergeSort(L_right)
i = 0
j = 0
k = 0
while i < len(L_left) and j < len(L_right):
if L_left[i] <= L_right[j]:
L[k] = L_left[i]
i += 1
else:
L[k] = L_right[j]
j += 1
k += 1
while i < len(L_left):
L[k] = L_left[i]
i += 1
k += 1
while j < len(L_right):
L[k] = L_right[j]
j += 1
k += 1
return L
#MyMatrix
"""
Project: MyMatrix.py Package
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added several Matrix algorithm
"""
def printMtrx(name, M):
print(f"{name} = ")
for y in range(len(M)):
print("{}".format(M[y]))
def sumMtrx(M1, M2):
sum_Mtrx = []
for i in range(len(M1)):
temp=[]
for j in range(len(M1[i])):
temp.append(M1[i][j]+M2[i][j])
sum_Mtrx.append(temp)
return sum_Mtrx
def subMtrx(M1, M2):
sub_Mtrx = []
for i in range(len(M1)):
temp=[]
for j in range(len(M1[i])):
temp.append(M1[i][j]-M2[i][j])
sub_Mtrx.append(temp)
return sub_Mtrx
def mulMtrx(M1, M2):
mul_Mtrx = [[] for i in range(len(M1))]
for i in range(len(M1)):
temp = [0] * len(M2[0])
for j in range(len(M1[0])):
for k in range(len(M2[0])):
temp[k] += M1[i][j] * M2[j][k]
mul_Mtrx[i] = temp
return mul_Mtrx
6.1 사용자 정의 패키지/서브패키지 - selectionSort()
사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/”를 생성하고, 중복되지 않는 정수형 난수의 리 스트 생성, 샘플 출력 및 뒤섞기 기능을 제공하는 genRandList(L, size), printListSample(L, size, per_line, sample_lines) 및 shuffleList(L, size)를 포함하는 사용자 정의 모듈 “MyList.py”을 준비하라.
사용자 정의 패키지/서브패키지 “C:/MyPyPackage/myPyModules/” 에 선택 정렬 알고리즘을 구현한 selectionSort(L)을 포함하는 사용자 정의 “MySortings.py”을 구현하라. 앞에서 구현한 사용자 정의 모듈 “MyList.py”을 함께 사용하는 다음 응용 프로그램을 사용하여 정확한 동작을 확인하라.
## 22211975_homework6
"""
Project: 22211975_homework6.1
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added user-defined module
"""
import sys
myPyModules_dir = "C:\MyPyPackage\myPyModules"
sys.path.append(myPyModules_dir)
# user-defined package / module
import MyList as ML
import MySortings as MS
L = []
n = 500
ML.genRandList(L, n)
print("정렬 전: ")
ML.printListSample(L, n, 10, 3)
MS.selectionSort(L)
print("\n정렬 후:")
ML.printListSample(L, n, 10, 3)
6.2 사용자 정의 패키지/서브패키지 - MySortings, mergeSort()
앞에서 준비하였던 사용자 정의 모듈 “MySortings.py”에 병합정렬 (mergeSort) 기능을 수행하는 함수/메소드 mergeSort(L)를 추가 하라. 다음 응용 프로그램을 사용하여 50000개의 중복되지 않는 정수형 난수에 대한 선택정렬과 병합정렬을 각각 실행시키고, 실 행에 걸린 경과시간을 측정하여 비교하라.
## 22211975_homework6
"""
Project: 22211975_homework6.2
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added user-defined module
"""
import time, sys
sys.path.append("C:/MyPyPackage/myPyModules")
import MyList as ML
import MySortings as MS
while True:
size = int(input("\n리스트의 크기를 입력하세요 (0 입력시 종료): "))
L = []
ML.genRandList(L, size)
print(f"(사이즈 : {size}) 병합 정렬 전 : ")
ML.printListSample(L, size, 10, 2)
t1 = time.time() # start time
MS.mergeSort(L) # L 을 병합정렬 한다.
t2 = time.time() # end time
print(f"\n(사이즈 : {size}) 병합 정렬 후 : ")
ML.printListSample(L, size, 10, 2)
print(f"{size}개의 난수를 병합 정렬 하는데 {t2-t1} 초가 걸렸습니다.")
ML.shuffleList(L)
print(f"\(사이즈 : {size}) 선택 정렬 전 : ")
ML.printListSample(L, size, 10, 2)
t1 = time.time() # start time
MS.selectionSort(L) # L 을 선택정렬 한다.
t2 = time.time() # end time
print(f"\n(사이즈 : {size}) 선택 정렬 후 : ")
ML.printListSample(L, size, 10, 2)
print(f"{size}개의 난수를 선택 정렬 하는데 {t2-t1} 초가 걸렸습니다.")
6.3 사용자 정의 패키지/서브패키지 - MyMatrix
사용자 정의 모듈 “MyMatrix.py” 을 준비하고, 행렬의 덧셈, 뺄셈, 곱셈 연산을 수행하는 함수/메소드 printMtrx(name, M), addMtrx(A, B), subMtrx(A, B), mulMtrx(A, B)를 포함시켜라. 이 사용자 정의 모듈을 사용자 정의 패키지 “MyPyPackage.myPyModules ”에 포함시킬 것. 다음 응용 프로그램을 사용하여 정확한 동작을 확인할 것.
## 22211975_homework6
"""
Project: 22211975_homework6.3
Author:
Date of last update: 22.10.04
Update list:
-v1.0: added user-defined module
"""
import sys
sys.path.append("C:/MyPyPackage/myPyModules")
import MyMatrix as MM
A = [[1,2,3,4], [5,6,7,8], [9,10,0,1]]
B = [[1,0,0,0], [0,1,0,0], [0,0,1,1]]
C = [[1,0,0], [0,1,0], [0,0,1], [0,0,0]]
MM.printMtrx("A", A)
MM.printMtrx("B", B)
MM.printMtrx("C", C)
D = MM.addMtrx(A, B)
MM.printMtrx("A + B", D)
E = MM.subMtrx(A, B)
MM.printMtrx("A - B", E)
F = MM.mulMtrx(A, C)
MM.printMtrx("A * C", F)