1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo thực hành môn học phân tích thiết kế thuật toán

19 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo Cáo Thực Hành Môn Học Phân Tích Thiết Kế Thuật Toán
Tác giả Đinh Thành Lộc
Người hướng dẫn Trần Văn Dũng
Trường học Trường Đại Học Giao Thông Vận Tải
Chuyên ngành Phân Tích Thiết Kế Thuật Toán
Thể loại Báo cáo thực hành
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 19
Dung lượng 1,7 MB

Nội dung

heapprivate Key[] keys; Mảng chứa giá trị gốc* Các phương thức: public IndexMaxPQint maxN Hàm tạo có tham số maxN là dung lượng tối đapublic boolean isEmpty Kiểm tra xem mảng có rỗng hay

Trang 1

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢIKHOA CÔNG NGHỆ THÔNG TIN

-o0o -BÁO CÁO THỰC HÀNH MÔN HỌC PHÂN TÍCH

THIẾT KẾ THUẬT TOÁN

Giảng viên : Trần Văn DũngSinh viên thực hiện: Đinh Thành LộcMã sinh viên : 221230909 Lớp: CNTT 2 K63

Hà Nội, tháng 5 năm 2024

Trang 2

heapprivate Key[] keys; Mảng chứa giá trị gốc

* Các phương thức:

public IndexMaxPQ(int maxN) Hàm tạo có tham số maxN là dung lượng tối đapublic boolean isEmpty() Kiểm tra xem mảng có rỗng hay không Ɵ(1)public boolean contains(int

i) Kiểm tra hàng đợi có chứa phần tử chỉ số‘i’ không (1)

Ɵ

public void insert(int i, Key

public Key keyOf(int i) Trả về ‘key’ của phần tử có chỉ số ‘i’ trong

Ɵ

Trang 3

public void changeKey(int i, Key key) Thay đổi ‘key’ của phần tử có chỉ số ‘i’ (log n)public void

decreaseKey(int i, Key key)

Giảm giá trị ‘key’ của phần tử tại chỉ số ‘I’ Ɵ(log n)public void increaseKey(int

i, Key key) Tăng giá trị ‘key’ của phần tử tại chỉ số ‘I’ (log n)

private void exch(int i, int

Ɵ

private void swim(int k) phần tử có chỉ số ‘k’ lên vùng heap cho đến

khi thuộc tính heap được thỏa mãn (n)

Ɵ

private void sink(int k) phần tử có chỉ số ‘k’ xuống heap cho đến khi

thuộc tính heap được thỏa mãn (n)

Ɵ

public Iterator<Integer> iterator() trả về một trình vòng lặp lặp lại các phần tử trong hàng ưu tiên theo thứ tự tăng dần của

các ‘key’ của chúng

(1)Ɵ

b) Kết quả chạy:

Trang 4

2 Cài đặt DijkstraAllPairs: tìm mọi đường đi giữa hai đỉnh

a)

*Thành phần dữ liệu :

private DijkstraSP[] dijkstrasp Mảng lưu trữ đường đi ngắn nhất từ đỉnh nguồn

điểm mọi đỉnh*Các phương thức :

public DijkstraAllPairsSP(EdgeWeightedDigraph G) Hàm tạo nhận một đồ thị có trọng số trên cạnh G là đối

số

O(V x (V + E) log V),V là số đỉnh, E là số cạnh

public Iterable<DirectedEdge> path(int s, int t) Iterable chứa các cạnh từ đỉnh s đến đỉnh t trên đường

đi ngắn nhất

O(1)public boolean hasPath(int s, int t) Kiểm tra đường đi có tồn tại

Trang 6

private boolean[] marked; Đánh dấu đỉnh có thuộc cây ko private IndexMinPQ<Double>

Phương thức khởi tạo của lớp thực thi thuậttoán Prim tìm cây bao trùm

O(ElogV),private void

prim(EdgeWeightedGraph G, int s)

private void scan(EdgeWeightedGraph G, int v)

Quét đỉnh v trong đồ thị và cập nhật thông

public Iterable<Edge> edges() Trả về giá trị các cạnh trong cây bao trùm min 𝑂( )𝑉public double weight() Tính tổng trọng số cây bao trùm Min O(E)private boolean

check(EdgeWeightedGraph G)

Kiểm tra tính đúng của cây bao trùm 𝑂( )𝐸

b) Kết quả chạy:

Trang 7

4 Đóng gói ba lô có phương thức: taobalo(), tonggiatri(), dovat()

 Lớp Item: đại diện cho một vật trong bài toàn xếp balo

public int getWeight() Trả về trọng lượng của vật Ɵ(1)

public int setWeight() Cập nhập giá trị cho trọng lượng Ɵ(1)Public String setProfit() Cập nhập giá trị cho giá trị Ɵ(1)

 Lớp Knapsack: giải quyết, lưu trữ kết quả và cung cấp phương thức truy cập kết quả

* Thành phần dữ liệu:

private int capacity Sức chứa tối đa của baloprivate Item[] item; Mảng chứa các đối tượngprivate boolean[][] sol; Mảng lưu trữ các giải pháp

* Các phương thức:

public int maxProfit() Tính toán và trả về lợi nhuận tối đa có thể

đạt được dựa trên sức chứa và danh sách cácđối tượng

(N x W),Ɵ

public void inBag() Xác định các đối tượng nào được chọn để

đạt lợi nhuận tối đa và in ra danh sách các đối tượng đó

(N x W)Ɵ

Trang 8

main Tạo danh sách đổi tượng và chạy chương

addSolution(int[][] solution)

thêm một ma trậnpublic void

printSolutions() in ra tất cả giải phápprivate void

printBoard(int[][] board) In ra 1 giải pháp Lớp NQueensss

* Thành phần dữ liệu:

Trang 9

private int N; Lưu trữ số lượng hậu private List<SolutionN>

solutions;

Danh sách chứa tất cả các giải pháp của bài toán, mỗi giải pháp được biểu diễn bằng đối tượng SolutionNPrivate void solve() Tìm tất cả các giải pháp của bài toán

private boolean isSafe(int row, int col,int board[][])

Kiểm tra việc đặt quân hậu đã hợp lí chưaprivate boolean

solveNQUtil(int col,int board[][])

Đệ quy tìm tất cả các giải pháp

* Các phương thức:

public AllSolNQueen(int N) Hàm tạo nhận số lượng quân hậupublic void printAllSolutions() In ra tất cả các giải pháppublic int getResults() Trả về tổng kết quảpublic void printSolution(int board[][]) In ra một giải pháp bẳng ma trận

* Hàm Main

public static void main(String args[]) Hàm main chạy chương trìnhb)Kết quả

Trang 10

6 Đóng gói: FileFrequencyIndex: các phương thức Đọc file, query(word)

* Các phương thức:

public FileFrequencyindex(String name)

Hàm tạo có tham số là chuỗi tên các tệp cần xử lý

Public void query(String key) Tìm kiếm xem ‘key’ xuất hiện trong các tệp nào và tần suất xuất hiện trong mỗi tệp (1)

Ɵ

Public static void

Ɵ

b)File text

Trang 11

c)Kết quả chạy

7 Cài đặt lớp Sinh vien Sinhvien: tính diem TBC, tinh diem TBC hoc ky(kythu), NhapdiemmonSV(Mon m, Integer diem)

a)

Trang 12

Các hàm getter setter và constructor Dùng để lấy và nhập giá trị và

khởi tạo đối tượngpublic void themMonHoc(Monhoc

monhoc)

Thêm 1 môn học vào danh sáchmôn hjc của sinh viên

O(1)

public double diemTBCHocKy(int hocKy)

Tình điểm trung bình 1 kì O(1)

học

b) Kết quả chạy:

8 TopM sinh vien: theo tiêu chí: Trẻ, Điểm TBC, Tên và họ đệm

 Lớp Student: quản lý thông tin sinh viên và các phương thức quản lý

Trang 13

* Các phương thức:

Main Chứa các hàm sắp xếp và chạy chương triình Ɵ(n)

Trang 14

(ƟmaxFlow * V^2)

b) Kết quả chạy:

10 Sử dụng Inversion trong Project Beyond: Cho một file Text danh sách sinh viên,mỗi sinh viên 1 dòng Danh sách sinh viên trên chưa được sắp xếp theo (tên, họ và đệm) Tìm số nghịch thể trong danh sách đã cho và sắp xếp lại theo thứ tự tên, họ đệm

a)

* Các phương thức

private CountingInversions() Phương thức tạo (constructor)private static long merge(int[] a, int[]

aux, int lo, int mid, int hi) Thực hiện việc kết hợp hai mảng con đã sắp xếp thành một mảng

con lớn và đếm số lượng đảo ngược trong quá trình này

O(n log n)private static long count(int[] a, int[]

b, int[] aux, int lo, int hi)

Dếm số lượng đảo ngược trong một mảng

O(n log n)public static long count(int[] a) Hàm được sử dụng để tính số

lượng đảo ngược trong một mảng

số nguyên a

O(nlog n)

Trang 15

private static <Key extends Comparable<Key>> long merge(Key[] a, Key[] aux, int lo, int mid, int hi)

Như hàm merge nhưng cho phép sử dụng bất kì kiểu dữ liệu nào khi gọi phuong thức

private static <Key extends Comparable<Key>> long count(Key[]a, Key[] b, Key[] aux, int lo, int hi)public static <Key extends Comparable<Key>> long count(Key[]a)

private static <Key extends Comparable<Key>> boolean less(Keyv, Key w)

Dược sử dụng để so sánh hai đối

private static <Key extends Comparable<Key>> long brute(Key[]a, int lo, int hi)

Đếm số lượng dảo ngược trong một mảng của các đối tượng có a

thể so sánh được với chính chúng

O(n^2)

private static long brute(int[] a, int lo,

b) File text

c) kết quả chạy :

Trang 16

11 Dựa trên Closest Pairs trong Project Beyond cài đặt FarthestPair: tìm 2 diểm xa nhau nhất

* Các phương thức:

ublic static double distance(Point p1,

ublic static double farthestDistance(Point[] points) Tìm khoảng cách xa nhất O(n^2)main Khởi tạo và tính toán O(1)

b) Kết quả chạy:

12 Đóng gói xếp lịch Weighted Interval Scheduling: đọc trong bài giảng Dynamic programming 1 và dựa trên file Job trong Context

a) Class Job*Phương thức

public int compareTo (Job y) So sánh hai công việc dựa trên

thời gian kết thúc của chúng O(1)

public static int Thực hiện tìm kiếm nhị phân O(log n)

Trang 17

findLastNonConflictingJob(List<Job>jobs, int n) trong danh sách các công việc đãđược sắp xếp theo thời gian kết

thúcpublic static int maxProfit(List<Job> jobs) Sắp xếp các công việc theo thời gian kết thúc tăng dần O(n log n)

Class WeightedIntervalScheduling*Phương thức

WeightedIntervalScheduling(List<Job>jobs)

Xây dựng, sắp xếp, lưu trữ đối tượng

O(n log n)public List<Job> getSelectedJobs() Trả về danh sách các công việc

đã chọn

O(1)public void printSelectedJobs() In ra thông tin của các công việc

public FileFrequencyIndex() Khởi tạo đối tượng

“FileFrequencyIndex” với HashMap để lưu trữ index

O(1)public void addFile(Path filePath) Đọc từng dòng trong tệp và đếm

private Map<String, Integer> countWords(Path filePath)

Đọc từng dòng trong tệp và đếm tần suất xuất hiện

O(m)public List<FileCount> query(String

word)

Truy vấn index để tìm từ được truy vấn

O(n log n)

Trang 18

b) File text

c) Kết quả

14 Cài đặt Edmond-Branching

a) Class EdmondsBranching*Phương thức

b) Kết quảpublic List<Edge> findMaximumBranching(Graph graph, int root)

Danh sách các cạnh thuộc cây tốiđa

O(n)

private void detectCycle(int node, Map<Integer, Edge> maxEdgeTo, Set<Integer> visited, Set<Integer> cycle)

phát hiện các chu trình trong đồ

public static void main(String[] args) Khởi tạo một đối tượng và chạy

chương trình

Trang 19

15 Cài đặt thuật toán Erliest-Finish-Time-First cho bài toán Interval Scheduling trong Bài giảng Greedy Algorithm

a) Class VietNamDate*Phương thức

public static void intervalScheduling(List<Interval> intervals)

Sắp xếp danh sách các khoảng thời gian theo thời gian kết thúc tăng dần

O(n log n)

public static void main(String[] args) Tạo một danh sách các khoảng

thời gian và gọi phương thức

intervalScheduling để lựa chọn

các khoảng thời gian

O(n log n)

b) Kết quả

Ngày đăng: 17/09/2024, 16:07

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w