Phan Toan y N20DCVT069 Bai Srot Lon

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Họ tên: Phan Toàn Ý Lớp: D20CQVT01-N

MSSV: N20DCVT069 Ngày giao bài: 03/10/2022

Đánh giá Giảng viên nhận xét

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=[]

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]))

print("Danh sách số lúc đầu : ",giatri)


Bước 3: Thực hiện giải thuật sắp xếp
- Thực hiện giải thuật Heapsort để sắp xếp các giá trị trong mảng giatri
Code:
def HoanDoi(ds,i,j):
tg=ds[i]
ds[i]=ds[j]
ds[j]=tg

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)

print("Danh sách số sau khi sort: ",giatri)


print("Thời gian chương tình chạy: ","--- %s seconds ---" % (time.time() - start_time))

2. Kết quả khi chạy chương trình


- Chạy với dữ liệu có 104 giá trị ta sẽ có thời gian như sau:

3. Kết Luận và nhận xét


- Khi chạy với dữ liệu có 104 giá trị ta sẽ thấy thời gian 11,85 giây. Khi chạy với 10000 giá trị thì thời
gian chạy nhanh hơn. Tuy nhiên khi nâng lên 100000 hoặc 1000000 giá trị thì thời gian chạy lâu hơn.
+ So sánh với giải thuật Bubble Sort
- Cũng với dữ liệu có 104 giá trị chương trình sẽ tốn Hơn 12,64 giây

- 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]))

print("Danh sách số lúc đầu : ",giatri)

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)

print("Thời gian thực hiện: ","--- %s seconds ---" % (time.time() - start_time))

You might also like