Kết thúc: Khi không còn sự đổi chỗ nào xảy ra trong một vòng lặp, nghĩa là dãy đã được sắp xếp và thuật toán kết thúc... CHƯƠNG 3: THUẬT TOÁN TÌM KIẾM3.1 Thuật toán Tìm kiếm Nhị phân Bi
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ MÔN HỌC
“Cấu trúc dữ liệu và giải thuật nâng cao”
Sinh viên thực hiện : NGUYỄN CHÍ ĐẠT
Hà Nội, tháng 7 năm 2024
Trang 2PHIẾU CHẤM ĐIỂM
Các sinh viên thực hiện:
Mã số sinh viên
Điểm Chữ ký của sinh viên
1
Giảng viên chấm:
1
2
MỤC LỤ
C
Trang 31
MỤC LỤC ẢNH 1
DANH MỤC TỪ VIẾT TẮT 4
LI M ĐU 5
CHƯƠNG 1 THUẬT TOÁN ĐỆ QUY 6
1.1 T$ng quan v+ đệ quy 6
1.1.1 Kh1i niệm 6
1.2 Khử đệ quy bằng ngăn xếp 6
1.2.1 Đ<c đi>m c?a an toBn mCng 6
1.2.2 C1c hDnh thEc tFn công mCng ph$ biến 6
1.2.3 C1c mô hDnh bIo mJt mCng 6
1.2.4 C1c biện ph1p bIo mJt 6
CHƯƠNG 2: THUẬT TOÁN SẮP XẾP 6
2.1 ThuJt to1n Buble sort 6
2.1.1 Aliase ( BU danh) 6
2.1.2 Rules ( LuJt) 6
2.1.3 NAT ( Biên dZch đZa ch[ mCng) 6
2.1.4 Routing ( ĐZnh tuyến) 6
2.1.5 Virtual Ips ( IP Io) 6
2.1.6 Schedules ( LZch trDnh) 6
2.1.7 Traffic Sharper ( QuIn l^ băng thông) 6
2.2 M_t s` chEc năng vB dZch va kh1c 6
2.2.1 VPN 6
2.2.2 Package Manager ( TrDnh quIn l^ gci) 6
2.2.3 Captive Portal ( C$ng c` đZnh) 6
2.2.4 DHCP ( Giao thEc cFu hDnh host đ_ng) 6
2.2.5 Snort 6
CHƯƠNG 3: THUẬT TOÁN TÌM KIẾM 6
3.1 CBi đ<t vB cFu hDnh m1y Io 6
Trang 43.1.1 Eve-ng 6
3.1.2 Firewall Pfsense 2.7.0 9
3.1.3 Ubuntu Server 22.04 12
3.1.4 Windows 10 15
3.1 Tri>n khai phmn thử nghiệm 19
3.1.3 BIng đZa ch[ IP c1c thiết bZ 20
3.2 CFu hDnh thiết bZ Router 22
3.2.1 CFu hDnh đZa ch[ IP cho c1c c$ng router R2 22
3.2.2 CFu hDnh đZnh tuyến tnnh 22
3.2.3 CFu hDnh cFp IP đ_ng cho c1c PC tCi chi nh1nh Ho ChU Minh 22
3.3 CFu hDnh Firewall Pfsense 23
3.3.1 CFu hDnh đZa chi IP cho c1c c$ng 23
3.3.2 CFu hDnh đZnh tuyến 23
3.3.3 CFu hDnh Aliases( BU danh) 24
3.3.4 CFu hDnh Rules ( LuJt) 25
3.3.5 CFu hDnh DHCP 27
3.3.6 CFu hDnh DNS 28
3.3.7 CFu hDnh NAT ( Biên dZch đZa ch[ mCng) 29
3.3.8 CFu hDnh Schedules 30
3.3.9 CFu hDnh Traffic Shaper 30
3.3.10 CFu hDnh VPN 32
3.3.11 CFu hDnh Snort 36
3.4 CFu hDnh Web Server 37
3.5 Kết quI chCy thử nghiệm 39
3.5.1 Ki>m tra dZch va DHCP 39
3.5.2 Ki>m tra tUnh liên thông trong mCng 43
3.5.3 Ki>m tra dZch va Web 47
3.5.4 Ki>m tra dZch va DNS 48
3.5.5 Ki>m tra dZch va VPN 49
Trang 53.5.6 Ki>m tra tUnh năng Snort 52 CHƯƠNG 4: THUẬT TOÁN TRÊN ĐỒ THỊ 55 TÀI LIỆU THAM KHẢO 56
Trang 6MỤC LỤC ẢNH
Trang 7DANH MỤC TỪ VIẾT TẮT
Dịch sang địa chỉ vật lý mạng
Giao thức Internet
Mạng riêng ảo
4
5
6
7
8
Trang 8L&I M' Đ)U
Công nghệ thông tin (Information Technology) là một ngành khoa học và có cả các yếu tố như công nghệ và kinh tế trong đó Các sinh viên chú ý nếu có tiếng Anh mà đã có tiếng Việt tương ứng thì không cần để nguyên bản tiếng Anh trong ngoặc Viết như dòng thứ nhất cho trường hợp từ tiếng Anh
đó chưa phổ dụng và các em tạm sử dụng các thuật ngữ tiếng Việt
Trang 9CHƯƠNG 1 THUẬT TOÁN ĐỆ QUY
1.1 Tng quan v đệ quy
1.1.1 Khi niệm
Đệ quy lB m_t c1ch giIi quyết bBi to1n bằng c1ch chia nhỏ bBi to1n thBnh c1c bBi to1n con gi`ng hệt nhau, roi giIi quyết từng bBi to1n con đc HBm sẽ tự gọi lCi chUnh nc cho đến khi g<p m_t trường hợp đơn giIn nhFt (đi+u kiện dừng) thD trI v+ kết quI
1.1.2 Đặc điểm của đệ quy
Điều kiện dừng: Điều kiện dừng giúp ngăn chặn việc gọi hàm vô tận và là một phần thiết
yếu của hàm đệ quy.
Phần đệ quy: Phần của hàm đệ quy sẽ gọi chính nó với một bài toán con nhỏ hơn, hướng
tới điều kiện cơ bản.
Hnh 1.1: Gii thiê u v đệ quy
1.1.3 Các loại đệ quy
Đệ quy tuyến tính (Linear Recursion)
Đệ quy đuôi (Tail Recursion)
Đệ quy nhị phân (Binary Recursion)
Đệ quy hỗ tương (Mutual Recursion)
Trang 101.2 Khử đệ quy bằng ngăn xếp
1.2.1 Khi niệm khử đệ quy
Khử đệ quy là việc biến đổi một thuật toán sử dụng hàm gọi lại chính nó (đệ quy) thành một thuật toán sử dụng vòng lặp Mục tiêu của việc này là tăng hiệu suất và tránh rủi ro tràn ngăn xếp trong một số trường hợp.
1.2.1 Khử đệ quy bằng ngăn xếp
Ngăn xếp có thể lưu trữ trạng thái của hàm đệ quy tại mỗi bước, bao gồm các tham số và địa chỉ tiếp theo cần thực hiện Khi chuyển từ đệ quy sang lặp, ngăn xếp giúp theo dõi các bước tiếp theo và giá trị tạm thời
Hnh 1.2: Cấu trúc khử đệ quy bằng ngăn xếp
CHƯƠNG 2: THUẬT TOÁN SẮP XẾP
Trang 112.1 Thuật ton Buble sort
2.1.1 Khái niêm
Thuật toán Bubble Sort hoạt động bằng cách so sánh từng cặp phần tử liền kề trong một dãy và đổi chỗ chúng nếu chúng ở vị trí sai Quá trình này được lặp đi lặp lại cho đến khi không còn sự đổi chỗ nào xảy
ra, nghĩa là dãy đã được sắp xếp.
2.1.2 Nguyên lý hoạt động
1. So sánh và đổi chỗ: Bắt đầu từ phần tử đầu tiên, so sánh phần tử hiện tại với phần tử kế tiếp
Nếu phần tử hiện tại lớn hơn phần tử kế tiếp (trong trường hợp sắp xếp tăng dần), thì đổi chỗ chúng.
2. Lặp lại: Tiếp tục quá trình so sánh và đổi chỗ cho các cặp phần tử còn lại trong dãy.
3. Di chuyển phần tử lớn nhất: Sau mỗi vòng lặp, phần tử lớn nhất sẽ "nổi lên" và được đặt vào
đúng vị trí cuối cùng.
4. Kết thúc: Khi không còn sự đổi chỗ nào xảy ra trong một vòng lặp, nghĩa là dãy đã được sắp xếp
và thuật toán kết thúc.
Hnh 2.1: Quy tắc Buble Sort
Trang 12Hnh 2.2: Thuật toán buble sort
2.1.3 Ưu điểm và nhược điểm
Ưu điểm:
o Là thuật toán cơ bản, dễ hiểu, phù hợp cho người bắt đầu học về sắp xếp.
o Đoạn code ngắn gọn, dễ nhớ.
Nhược điểm:
o Hiệu suất chậm nhất trong các thuật toán sắp xếp.
o Không hiệu quả với những dữ liệu lớn.
Trang 13CHƯƠNG 3: THUẬT TOÁN TÌM KIẾM
3.1 Thuật toán Tìm kiếm Nhị phân (Binary Search)
3.1.1 Khái niệm
Tìm kiếm nhị phân là một thuật toán tìm kiếm hiệu quả được sử dụng để tìm một phần tử trong một dãy đã được sắp xếp Thay vì kiểm tra từng phần tử một như trong tìm kiếm tuần tự, thuật toán này hoạt động bằng cách liên tục chia đôi khoảng tìm kiếm O(log n)
3.1.2 Nguyên lý hoạt động
1 Khởi tạo: Xác định khoảng tìm kiếm ban đầu là toàn bộ dãy.
2 Tìm phần tử giữa: Tìm phần tử ở vị trí giữa của khoảng tìm kiếm.
3 So sánh: So sánh phần tử giữa với phần tử cần tìm.
o Bằng nhau: Tìm thấy phần tử.
o Lớn hơn: Phần tử cần tìm nằm trong nửa trái của khoảng.
o Nhỏ hơn: Phần tử cần tìm nằm trong nửa phải của khoảng.
4 Điều chỉnh khoảng tìm kiếm: Thu hẹp khoảng tìm kiếm dựa vào kết quả so
sánh ở bước 3
5 Lặp lại: Tiếp tục các bước 2, 3, 4 cho đến khi tìm thấy phần tử hoặc khoảng
tìm kiếm trở nên rỗng
Trang 14Hnh 3.1: Quy tắc của tm kiếm nhị phân
3.1.6 Ưu điểm và nhược điểm
Ưu điểm:
o Hiệu suất cao: Với các dãy lớn, tìm kiếm nhị phân nhanh hơn nhiều
so với tìm kiếm tuần tự
o Dễ hiểu: Nguyên lý hoạt động tương đối đơn giản.
Nhược điểm:
o Yêu cầu dãy đã được sắp xếp: Nếu dãy chưa được sắp xếp, cần phải
sắp xếp trước khi áp dụng thuật toán
Trang 15Hnh 3.2: Thuật toán tm kiếm nhị phân
CHƯƠNG 4: THUẬT TOÁN TRÊN ĐỒ THỊ
4.1 Giới thiệu về đồ thị
Định nghĩa: Đồ thị là một cấu trúc dữ liệu bao gồm một tập hợp các đỉnh (node) và một tập hợp
các cạnh (edge) kết nối các đỉnh với nhau.
Trang 16 Phân loại đồ thị:
o Đồ thị vô hướng: Các cạnh không có hướng, tức là mối quan hệ giữa hai đỉnh là hai
chiều.
o Đồ thị có hướng: Các cạnh có hướng, tức là mối quan hệ giữa hai đỉnh là một chiều.
Cách biểu diễn đồ thị:
o Ma trận kề: một ma trận vuông, trong đó phần tử ở hàng i và cột j cho biết có cạnh nối
giữa đỉnh i và đỉnh j hay không.,
o Danh sách kề: một mảng, mỗi phần tử của mảng là một danh sách các đỉnh kề với đỉnh
tương ứng.
4.2 Tìm kiếm trên đồ thị
Mục tiêu: Duyệt qua tất cả các đỉnh của đồ thị.
Ứng dụng: Tìm đường đi, tìm thành phần liên thông, phát hiện chu trình,
4.2.1 Tìm kiếm theo chiều rộng (Breadth-First Search - BFS)
Nguyên lý: Duyệt các đỉnh theo lớp, bắt đầu từ một đỉnh nguồn, sau đó duyệt các đỉnh kề trực
tiếp, rồi đến các đỉnh kề của các đỉnh vừa duyệt, và cứ tiếp tục như vậy.
Thuật toán:
o Khởi tạo một hàng đợi để lưu trữ các đỉnh cần duyệt.
o Đánh dấu đỉnh bắt đầu là đã được thăm.
o Thêm đỉnh bắt đầu vào hàng đợi.
o Trong khi hàng đợi không rỗng:
Lấy đỉnh đầu ra khỏi hàng đợi.
Duyệt qua tất cả các đỉnh kề của đỉnh vừa lấy ra.
Nếu đỉnh kề chưa được thăm, đánh dấu và thêm vào hàng đợi.
Ưu điểm:
o Tìm được đường đi ngắn nhất từ đỉnh bắt đầu đến tất cả các đỉnh khác (trong đồ thị không trọng số).
Nhược điểm:
o Tốn nhiều bộ nhớ hơn DFS.
Ứng dụng:
o Tìm đường đi ngắn nhất trong đồ thị không trọng số.
o Kiểm tra đồ thị có liên thông hay không.
o Tìm thành phần liên thông.
Trang 17 Cài đặt thuật toán
Hnh 4.1: Thuật toán BFS
4.2.2 Tìm kiếm theo chiều sâu (Depth-First Search - DFS)
Nguyên lý: Duyệt sâu vào một nhánh của đồ thị trước khi quay lại duyệt các nhánh khác.
Thuật toán:
o Khởi tạo:
Trang 18và gán giá trị mặc định là chưa thăm (ví dụ: 0).
Tạo một ngăn xếp (stack) để lưu trữ các đỉnh trong quá trình duyệt.
o Bắt đầu từ đỉnh xuất phát:
Đưa đỉnh xuất phát vào ngăn xếp và đánh dấu nó là đã thăm.
o Duyệt qua các đỉnh:
Trong khi ngăn xếp không rỗng:
Lấy đỉnh trên cùng của ngăn xếp (đỉnh hiện tại).
Nếu đỉnh này chưa được thăm:
Xử lý hoặc in đỉnh (tuỳ thuộc vào yêu cầu của bài toán).
Đánh dấu đỉnh là đã thăm.
Thêm tất cả các đỉnh kề chưa thăm vào ngăn xếp.
o Tiếp tục cho đến khi ngăn xếp rỗng:
Quá trình sẽ tiếp tục cho đến khi không còn đỉnh nào trong ngăn xếp.
Ưu điểm:
o Sử dụng bộ nhớ ít hơn BFS.
Nhược điểm:
o Không đảm bảo tìm được đường đi ngắn nhất.
Ứng dụng:
o Tìm chu trình trong đồ thị.
o Giải các bài toán về tìm đường đi.
Cài đặ thuật toán
Trang 19Hnh 4.1: Thuật toán DFS