Professional Documents
Culture Documents
Phan Toan y N20DCVT069 Bai Srot Lon
Phan Toan y N20DCVT069 Bai Srot Lon
Phan Toan y N20DCVT069 Bai Srot Lon
BÁO CÁO
THỰC HIỆN BÀI SORT CHO FILE LỚN
Đề bài:
Khởi tạo một file có 2 cột: cột 1 là thứ tự và cột 2 là số ngẫu nhiên từ 1 đến 10 6. Lưu lại
thành file.
- Lập trình Python/hoặc C để sort theo theo giá trị của cột 2.
- Tính toán thời gian chạy
- Tối ưu code và nhận xét
BÀI LÀM
1. Tiến trình thực hiện
Bước 1: Tạo file 1 triệu dòng trong Python
- Import thư viện random
- Tạo thư mục có tên “file1trieudong.txt”
- Khai báo thư mục “file1trieudong.txt”
- Chạy vòng lập for từ 1 đến 106 sử dụng lện random.randint để tạo các giá trị ngẫu nhiên cho các dòng
Code:
import random
file = open('file1trieudong.txt', 'w')
for i in range(1, 1000000):
file.write(str(i) + ' ' + str(random.randint(1, 1000000)) + '\n')
file.close()
Bước 2: Lấy giá trị từ file 1 triệu dòng và sử dụng giải thuật sort
- Mở file “file1trieudong.txt” mình vừa tạo
- Khai báo thư viện time để tính thời gian thực hiện chương trình
- Khai báo các giá trị để tiến hành lấy các giá trị trong file “file1trieudong.txt”. Trong đó có mảng giatri
để lưu các giá trị được lấy ra từ file
Code:
file = open('file1trieudong.txt')
import time
start_time = time.time()
Lines = file.readlines()
count = 0
values = []
giatri=[]
def VunGoc(ds,g,l):
if (2*g+1==l):
if (ds[2*g+1]>ds[g]):
HoanDoi(ds,g,2*g+1)
else:
if (ds[2*g+1]>ds[2*g+2]):
j=2*g+1
else:
j=2*g+2
if (ds[g]<ds[j]):
HoanDoi(ds,g,j)
def VunCay(ds):
l=len(ds)-1
g=len(ds)//2 -1
while (l>=0):
for j in range(g,-1,-1):
VunGoc(ds,j,l)
HoanDoi(ds,0,l)
l=l-1
g=(l+1)//2-1
VunCay(giatri)
- Khoảng cách thời gian tuy không quá lớn nhưng khi tăng dữ liệu thì các giải thuật sẽ tăng thêm thời gian
thực hiện và sẽ có sự chên lệch khác nhau rõ ràng hơn.
Code sử dụng giải thuật Bubble Sort:
file = open('file1trieudong.txt')
import time
start_time = time.time()
Lines = file.readlines()
count = 0
values = []
giatri=[]
# Strips the newline character
for line in Lines:
count += 1
value = line.strip().split(" ")
values.append(value[1])
print("Danh sách số {}".format(values))
for i in range(0,len(values)):
giatri.append(int(values[i]))
lap=range(len(giatri)-1,-1,-1)
for i in lap:
for j in range(0,i,1):
if(giatri[j]>giatri[j+1]):
t=giatri[j]
giatri[j]=giatri[j+1]
giatri[j+1]=t
print("Danh sách số sau khi sort xong: ",giatri)