Tải bản đầy đủ (.docx) (23 trang)

BALO THUẬT TOÁN THAM ĂN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.61 MB, 23 trang )

MỌI THÔNG TIN CHI TIẾT XIN LIÊN
HỆ
MAIL:
XEM DEMO
BÁO CÁO
CODE


KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

BỘ MÔN CÔNG NGHỆ PHẦN MỀM

ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN CƠ SỞ NGÀNH KTPM
(Học kỳ 1, Năm học 2020-2021)
GIÁO VIÊN HƯỚNG DẪN:
ST
HỌ VÀ TÊN
MSCB
T
1
TS.Nguyễn Công Danh
SINH VIÊN THỰC HIỆN:
ST
HỌ VÀ TÊN
MSSV
THƯỞNG
ĐIỂM
T
(Tối đa 1,0 điểm)
1
XXXXXXX


XXXXXXX


















I. HÌNH THỨC (Tối đa 0,5 điểm)
Bìa (tối đa 0,25 điểm)
Các tiêu đề: Trường ĐHCT, Khoa CNTT
CƠđềSỞ
Loại niên luận: Cơ sởNIÊN
ngànhLUẬN
KTPM, Tên
tài NGÀNH KTPM
Giáo viên hướng dẫn: chức danh, họ tên.
Tên đề tài
Thông tin về các sinh viên thực hiện: họ tên, mã số, lớp

Năm thực
hiện
BÀI
TOÁN XẾP BA LƠ DÙNG THUẬT TỐN THAM ĂN
Bố cục (tối đa 0.25 điểm)
Nhận xét của giáo viên hướng dẫn và giáo viên chấm
Mục lục: cấu trúc chương, mục và tiểu mục
Phụ lục (nếu có)
Tài liệu tham khảo
II. NỘI DUNG (Tối đa 3,5 điểm)
Tổng quan (tối đa 0,5 điểm)
Mơ tả bài tốn, mục tiêu cần đạt được (0,25 điểm)
Hướng giải quyết và kế hoạch thực hiện (0,25 điểm)
Lý thuyết (tối đa 0,5 điểm)
Các khái
sử dụng
Sinh
viênniệm
thực
hiện:trong đề tài
Cán bộ hướng dẫn
Kết quả vận dụng lý thuyết vào đề tài
TS. Nguyễn Công Danh
XXXXXXX
Ứng dụng (tối đa 2,0 điểm)
Phân tích
u cầu bài tốn, xây dựng các cấu trúc dữ liệu cần thiết (tối đa
MSSV:
XXXXXXX
0,5 điểm)

Lớp:
Giải DI1796A2
thuật (Lưu đồ-Ngơn ngữ giả) (1,0 điểm)
Giới thiệu chương trình (0,5 điểm)
Kết luận (tối đa 0,5 điểm)

HỌC KỲ 1, 2020 - 2021






Nhận xét kết quả đạt được
Hạn chế
Hướng phát triển
III. CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm)
Giao diện thân thiện với người dùng (1.0 điểm)
Hướng dẫn sử dụng (0,5 điểm)
Kết quả thực hiện đúng với kết quả của phần ứng dụng (3,5 điểm)
Ghi chú:
Nếu sinh viên demo chương trình và trả lời vấn đáp không đạt yêu cầu của giáo viên hướng
dẫn thì sinh viên sẽ nhận điểm F cho học phần này.
Cần Thơ, ngày

tháng năm 2020

GIÁO VIÊN CHẤM

Mục lục



Chương 1: TỔNG QUAN
I.

MƠ TẢ BÀI TỐN

Ngày nay, việc đi lại, vận chuyển hàng hóa trở nên phổ biến với rất nhiều hình thức
vận chuyển như đường bộ, đường sắt, đường thủy, đường hàng không,... Tùy vào
phương thức vận chuyển mà chi phí khác nhau. Nhưng đặc điểm chung của các
phương thức vận chuyển là việc tính phí dựa trên khối lượng hàng hố.
Giả sử một người bán hàng có N đồ vật khác nhau, với mỗi đồ vật có giá trị khác
nhau, và số lượng khác nhau. Người đó có một vé bay từ TP Cần Thơ đến Phú Quốc
và khối lượng hàng lý gửi tối đa chỉ là W kg. Nhưng tổng đồ mà người đó dự định
đem theo vượt quá khối lượng tối đa W. Vấn đề ở đây là làm sao giúp người đó chọn
từ các đồ vật hiện có sao cho tổng giá trị các đồ vật là lớn nhất. Nếu số lượng đồ vật ít
người đó có thể tự tính, nhưng với số lượng đồ vật nhiều, việc tính tốn trở nên rất
phức tạp, tính tốn thủ cơng rất tốn thời gian cũng như kết quả tính có có thể khơng
tối ưu.
Với vấn đề trên, chúng ta cần xây dựng một phần mềm có thể giúp chọn từ các đồ vật
đó trong khối lượng W sao cho giá trị là lớn nhất. Phần mềm này có thể áp dụng trong
mọi trường hợp mà người dùng muốn chọn các đồ vật sẵn có để tối ưu về giá trị

II.

MỤC TIÊU CẦN ĐẠT ĐƯỢC

Với vấn đề đã nêu bên trên, có thể xác định các mục tiêu quan trọng như sau:
Vận dụng các kiến thức đã học để giải quyết vấn đề
Xây dựng phần mềm cho phép chọn được các đồ vật tối ưu nhất

Phần mềm có thể được áp dụng trong nhiều trường hợp
Phần mềm cho phép người dùng nhập xuất dữ liệu bằng file excel
Áp dụng thuật tốn tham ăn để tìm kết quả
Xây dựng giao diện người dùng hiển thị dữ liệu
Thiết kế giao diện đơn giản, dễ thao tác, hiệu quả
III.

HƯỚNG GIẢI QUYẾT

Tổ chức một cấu trúc dữ liệu để thể hiện cho mỗi đồ vật. Sử dụng một mảng để lưu
danh sách các đồ vật. Tính giá trị sử dụng bằng cách lấy giá trị chia cho khối lượng.
Dùng thuật toán sắp xếp để sắp xếp mảng theo thứ tự giảm dần giá trị sử dụng. Tiếp
theo, áp dụng thuật toán tham ăn vào mảng đã sắp xếp để tính số lượng cho mỗi đồ
vật.

4


IV.

KẾ HOẠCH THỰC HIỆN

Chương 2: LÝ THUYẾT
I. CÁC KHÁI NIỆM
2.1.1 Các khái niệm về thuật toán tham ăn
Thuật toán tham ăn (greedy) thường được vận dụng để giải bài toán tối ưu tổ hợp bằng
cách xây dựng một phương án X. Phương án X được xây dựng bằng cách lựa chọn
từng thành phần Xi của X cho đến khi hoàn chỉnh (đủ n thành phần). Với mỗi Xi là sẽ
lựa chọn nó một cách tối ưu. Với cách này thì có thể ở bước cuối cùng ta khơng cịn gì
để chọn mà phải chấp nhận một giá trị cuối cùng còn lại.

Áp dụng kỹ thuật tham ăn sẽ cho một thuật tốn thời gian đa thức, tuy nhiên nói chung
chúng ta chỉ đạt được một phương án tốt chứ chưa hẳn là tối ưu.
Áp dụng kỹ thuật tham ăn để giải quyết bài tốn cái ba lơ
Theo u cầu của bài tốn thì ta cần những đồ vật có giá trị cao mà trọng lượng lại
nhỏ để sao cho tổng giá trị là lớn nhất, sẽ là hợp lý khi ta quan tâm đến yếu tố "đơn
giá" của từng loại đồ vật là tỷ lệ giá trị/trọng lượng. Đơn giá càng cao thì đồ càng giá
trị. Từ đó ta có kỹ thuật tham ăn áp dụng cho bài toán này là:
1. Tính đơn giá cho các loại đồ vật.
2. Xét các loại đồ vật theo thứ tự đơn giá từ lớn đến nhỏ (dùng thuật toán sắp xếp
nổi bọt)
3. Với mỗi đồ vật được xét sẽ lấy một số lượng tối đa mà trọng lượng W cịn lại
của ba lơ cho phép.
4. Xác định trọng lượng còn lại của ba lơ và quay lại bước 3 cho đến khi khơng
cịn có thể chọn được đồ vật nào nữa.
Về tổ chức dữ liệu, mỗi đồ vật được biểu diễn bởi một cấu trúc gồm có:
name: tên đồ vật,
value: giá trị của đồ vật,
weight: trọng lượng của đồ vật,
qty: số lượng đồ vật được chọn,
stock: số lượng hiện có của đồ vật
Danh sách các đồ vật được biểu diễn dưới dạng một mảng đồ vật.
Các loại (biến thể) của bài toán cái ba lô (loại ba lô)
- Loại 1: Số lượng đồ vật được chọn không giới hạn
- Loại 2: Số lượng đồ vật được khơng vượt q số lượng hiện có của đồ vật
- Loại 3: Số lượng mỗi loại đồ vật chỉ được chọn một cái
5


2.1.2 Các khái niệm thuật toán sắp xếp nổi bọt (Bubble Sort)
Chúng ta tưởng tượng rằng các mẫu tin được lưu trong một mảng, qua quá trình sắp

xếp, mẫu tin nào có khóa “nhẹ” sẽ được nổi lên trên. Chúng ta duyệt toàn mảng, từ
dưới lên trên. Nếu hai phần tử ở cạnh nhau mà không đúng thứ tự tức là nếu phần tử
“nhẹ hơn” nằm ở dưới thì phải cho nó “nổi lên” bằng cách đổi chỗ hai phần tử nàu đổi
chỗ cho nhau. Cụ thể:
- Bước 1: Xét các phần tử từ a[n-1] đến a[1], với mỗi phần tử a[j], so sánh khóa
của nó với khóa của phần tử a[j-1] đứng ngay trước nó. Nếu khóa của a[j] nhỏ
hơn khóa của a[j-1] thì hốn đổi a[j] và a[j-1] cho nhau.
- Bước 2: Xét các phần tử từ a[n-1] đến a[2] và làm tương tự như trên.
- Sau n-1 bước thì kết thúc
Độ phức tạp:
Với mỗi i = 1,2,..,n-1 ta cần i phép so sánh. Do đó số nhiều nhất các lần so sánh
và đổi chỗ trong giải thuật là
Do đó độ phức tạp của giải thuật cỡ O(n2).
2.1.3 Các khái niệm được sử dụng trong chương trình
Thuật tốn tham ăn là thuật toán giải quyết các bài toán theo kiểu lựa chọn tối ưu cục
bộ ở mỗi bước từ đó hy vọng tìm được tối ưu tồn cục.
2.1.4 Chú thích các từ ngữ và ký hiệu được sử dụng trong tài liệu
Các từ ngữ và ký hiệu được sử dụng trong tài liệu được giải thích trong Bảng 2.1.
Từ ngữ và ký hiệu
Phương án X
Đơn giá
W
Loại ba lô

Chú thích
Kết quả của thuật tốn tham ăn
Tỷ lệ của giá trị/trọng lượng của một vật
Trọng lượng của ba lô
Cách thức chọn số lượng đồ vật khi thực hiện
thuật toán tham ăn


Bảng 2.1: Các từ ngữ và ký hiệu được sử dụng
II. KẾT QUẢ VẬN DỤNG LÝ THUYẾT VÀO ĐỀ TÀI
Nắm vững cơ cở lý thuyết về cấu trúc dữ liệu, thuật toán sắp xếp, thuật toán tham ăn
để áp dụng vào việc cài đặt phần thuật toán cho phần mềm để giải quyết vấn đề. Áp
dụng các kiến thức về thiết kế giao diện người dùng để tạo ra giao diện cho phần
mềm.

6


Chương 3: KẾT QUẢ ỨNG DỤNG
I.

PHÂN TÍCH YÊU CẦU BÀI TOÁN, XÂY DỰNG CÁC CẤU TRÚC DỮ
LIỆU CẦN THIẾT

3.1.1 Phân tích u cầu bài tốn
Với những mơ tả ở mục Mô Tả Tổng Quan ở trên đã đặt ra yêu cầu chọn các đồ vật từ
đồ vật đã cho sao cho tối ưu nhất về giá trị.
Với yêu cầu như thế, có thể áp dụng các thuật tốn quy hoạch động, nhánh cận, tham
ăn để giải quyết. Ở đây chúng ta dùng thuật toán tham ăn để giải quyết bài tốn. Vì
thuật tốn này có các ưu điểm như:





Dể cài đặt
Tương đối đơn giản

Hiệu quả cao
Cho kết quả tương đối chính xác

Input: Danh sách các đồ vật nhập từ người dùng (nhập trực tiếp từ bàn phím, nhập từ
file excel hoặc txt), khối lượng tối đa và loại ba lô.
Output: Danh sách các đồ vật đã nhập cùng với số lượng được chọn của chúng, tổng
khối lượng và tổng giá trị các đồ vật. Có thể xuất kết quả ra file excel.
3.1.2 Cấu trúc dữ liệu cần thiết
Ta có hai dạng cấu trúc cần thiết để giải quyết bài toán này
• Cấu trúc dữ liệu cho mỗi đồ vật gồm: tên, giá trị, trọng lượng, số lượng hiện có,
số lượng lấy.
item: {name, value, weight, stock, qty}
• Cấu trúc dữ liệu kiểu danh sách để lưu danh sách các đồ vật.
II.

GIẢI THUẬT LƯU ĐỒ

3.2.1 Mã giả
Dữ liệu đầu vào: Danh sách các đồ vật, khối lượng tối đa, loại ba lô
Dữ liệu đầu ra: Số lượng chọn các đồ vật
Khởi tạo:
items[] : dang sách các đồ vật
Kiểm tra dữ liệu đầu vào
if(hợp lệ){
7


thực hiện thuật toán sắp xếp sủi bọt
for(i = 0; i < items.length - 2; i++){
for(j=items.length-1; j>=i; j--){

so sánh giá trị sử dụng của items[j] và items[j-1] với
giá trị sử dụng vật j = items[j].value / items[j].weight
giá trị sử dụng vật j-1 = items[j-1].value / items[j1].weight
if giá trị sử dụng của items[j] lớn hơn items[j-1] thì đổi
chỗ 2 vật đó
}
}
thực hiện thuật toán tham ăn để chọn số lượng của mỗi đồ vật
switch (loại ba lô){
case loại 1:
for(i=0; i< items.length; i++){
items[i].qty = W / items[i].wieght
W = W – items[i].qty * items[i].weight
}
case loại 2:
for(i=0; i< items.length; i++){
items[i].qty = W / items[i].wieght
if (items[i].qty > items[i].stock)
items[i].qty = items[i].stock

W = W – items[i].qty * items[i].weight
}
case loại 3:
for(i=0; i< items.length; i++){
items[i].qty = W / items[i].wieght
if (items[i].qty > 1)
8


items[i].qty = 1

W = W – items[i].qty * items[i].weight
}
}
Xuất kết quả ra giao diện
}
else{
báo lỗi
yêu cầu nhập lại
}

9


3.2.2 Lưu đồ
Giải thuật được trình bày trong hình 3.1.

Hình 3.1: Lưu đồ giải thuật tham ăn

10


III.

GIỚI THIỆU CHƯƠNG TRÌNH

Link chương trình demo: />3.3.1 Kiến trúc phần mềm
• Kiến trúc phần mềm
o Phần mềm được xây dựng dựa trên kiến trúc server – client
o Phần mềm được viết bằng ngôn ngữ Javascript, CSS, HTML và sử dụng
React (một thư viện Javascript dùng đề xây dựng giao diện phía client).

Trong đó:
 Javascript và thư viện React dùng để xử lý các thao tác nhập xuất
từ người dùng, nhận, gửi, xử lý dữ liệu và thực hiện thuật tốn
chính của phần mềm. Ngồi ra, nó chịu trách nhiệm render ra mã
HTML cho trình duyệt.
 HTML, CSS dùng để xây dựng giao diện người dùng trên trình
duyệt web.
o Áp dụng kỹ thuật render phía client (client side rendering)

Hình 3.2: Mơ hình server-client theo kỹ thuật client side render

11


• Sơ đồ Usecase
Chương trình có một nhóm người dùng, như được trình bày trong Hình 3.2.

Hình 3.3: Sơ đồ usecase

12


• Sơ đồ Class

Hình 3.4: Sơ đồ Lớp
3.3.2 Giao diện
• Giao diện chính:

Hình 4: Giao diện chính
• Giao diện nhập khối lượng tối đa


Hình 5: Giao diện nhập khối lượng ba lô
13


• Giao diện chọn loại ba lơ

Hình 6: Giao diện chọn loại ba lơ
• Giao diện nhập xuất file

Hình 7: Giao diện nhập xuất file
• Giao diện danh sách đồ vật và nhóm nút điền khiển

Hình 8: Giao diện danh sách đồ vật và nhóm nút điền khiển
14


• Giao diện trợ giúp

Hình 9: Giao diện trợ giúp

15


Chương 4: KẾT LUẬN-ĐÁNH GIÁ
I.

KẾT QUẢ ĐẠT ĐƯỢC
Nắm vững hơn kiến thức cấu trúc dữ liệu và giải thuật về thuật tốn tham ăn
Hồn tất được phần mềm “Sắp xếp ba lơ” với u cầu đã đề ra là: có giao diện

người dùng, có thể nhập xuất dữ liệu từ giao diện và từ file
Xây dựng giao diện người dùng thân thiện, đơn giản
Sử dụng các kiến thức về lập trình web để xây dựng phần mềm
Áp dụng các nguyên tắc về xây dựng giao diện người dùng trong việc xây dựng
giao diện cho phần mềm
Triển khai được phần mềm ra một host miễn phí mà người dùng có thể truy cập
thơng qua trình duyệt
Biết các viết tài liệu báo cáo khoa học hồn chỉnh

II.

HẠN CHẾ
Giao diện người dùng cịn nhiều thiếu sót, chưa đẹp, ấn tượng
Chưa có chức năng kiểm tra sự hợp lệ của file dữ liệu được thêm vào
Giao diện chỉ hỗ trợ cho các thiết bị màn hình lớn như desktop, laptop, tablet,...
chưa có hỗ cho các thiết bị có màn hình nhỏ như điện thoại
Thuật tốn sắp xếp sủi bọt có độ phức tạp cao O(n2) có thể làm chậm chương
trình nếu có nhiều dữ liệu

III.

HƯỚNG PHÁT TRIỂN
Thêm các hiệu ứng cho các thao tác trên giao diện
Thêm chức năng sắp xếp theo tên, giá trị, số lượng,... trong danh sách đồ vật
Thêm chức năng lưu lịch sử các lần thực hiện thuật toán
Thêm chức năng undo
Làm cho giao diện thân thiện và dể sử dụng hơn
Phát triển phần mềm phù hợp với các thiết bị di động

16



PHỤ LỤC (phần này có thể bị bỏ đi và nhập vào phần giới thiệu
giao diện)
I.

HƯỚNG DẪN SỬ DỤNG

Hướng dẫn nhập dữ liệu bằng tay:
Các dữ liệu cần nhập: Trọng lượng tối đa, loại ba lô và danh sách đồ vật
Bước 1: Nhập trọng lượng tối đa: Chọn ô “Trọng lượng” > nhập vào trọng lượng

Hình 8
Bước 2: Chọn loại ba lô:

17


Hình 9
Bước 3: Nhập danh sách đồ vật: Chọn nút “Thêm” > nhập thông tin đồ vật bao gồm:
tên, giá trị, trọng lượng và số lượng hiện có (nếu là ba lơ loại 2)

Hình 10
Hướng dẫn nhập dữ liệu bằng file:
Bước 1 và bước 2 giống như nhập dữ liệu bằng tay
Bước 3: Chọn file: Chọn “Thêm file”:

18



Hình 11
Bước 4: Chọn file cần thêm:

Hình 12
Danh sách đồ vật được thêm bằng file

19


Hình 13
Lưu ý:
• Định dạng file phải là excel (.xlsx) hoặc file text (.txt)
• Đối với file excel phải có cấu trúc:

Hình 14
• Đối với file text (.txt) phải có cấu trúc: dòng đầu là trọng lượng tối đa, các
dòng tiếp theo ‘giá trị’ ‘trọng lượng’ ‘số lượng hiện có’ ‘tên đồ vật’

Hình 15
Hướng dẫn xố đồ vật:
Bước 1: Click vào icon’ ‘ tại đồ vật cần xoá
20


Hình 16
Hướng dẫn chọn số lượng đồ vật (thực hiện thuật toán tham ăn):
Bước 1: Sau khi đã nhập xong dữ liệu (bằng tay hoặc file). Chọn nút ‘Tham Ăn’

Hình 17
Bước 2: Xem kết quả ở cột “Số lượng lấy”


21


Hình 18
Hướng dẫn xuất file kết quả:
Bước 1: Sau khi thực hiện chọn số lượng đồ vật thành công. Chọn nút “Xuất File”

Hình 19
Bước 2: File được xuất và nội dung file

22


Hình 20

Hình 21

II. TÀI LIỆU THAM KHẢO
[1] Nguyễn Văn Linh. Giáo trình Phân tích và thiết kế thuật tốn. Cần thơ.
[2] Trần Cao Đệ. Giáo trình Cấu trúc dữ liệu. Cần thơ, 2012.
[3] React. />
23



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×