Transcript
Page 1: Cấu Trúc Dữ Liệu Giải Thuật

Cấu Trúc Dữ Liệu

Giải ThuậtYNT

HoàNT

Page 2: Cấu Trúc Dữ Liệu Giải Thuật

Giải thuậtGiải thuật sắp xếpGiải thuật tìm kiếm

Day 1

Page 3: Cấu Trúc Dữ Liệu Giải Thuật

Đơn vị cấu trúc

Cấu trúc dữ liệu

Page 4: Cấu Trúc Dữ Liệu Giải Thuật

Bài toánLựa chọn GT

Giải thuật

Page 5: Cấu Trúc Dữ Liệu Giải Thuật

Bài toánLựa chọn GT

Giải thuật

Page 6: Cấu Trúc Dữ Liệu Giải Thuật

Selection SortBubble SortQuick Sort

Sắp xếp (sorting)

Page 7: Cấu Trúc Dữ Liệu Giải Thuật

Selection Sortselectionsort(data[])

for i = 0 to data.length-2select the smallest element among

data[i] to data[data.length-1];swap it with data[i];

Page 8: Cấu Trúc Dữ Liệu Giải Thuật

Selection Sort

Page 9: Cấu Trúc Dữ Liệu Giải Thuật

Bubble Sortpublic void bubblesort(int[] data) {

for (int i = 0; i < data.length-1; i++)

for (int j = data.length-1; j > i; --j)

if (data[j] < data[j-1])

swap(data,j,j-1);

Page 10: Cấu Trúc Dữ Liệu Giải Thuật

Bubble Sort

Page 11: Cấu Trúc Dữ Liệu Giải Thuật

Quick Sortvoid Partition(int *k, int L, int H){

int i,j;

int pivot;

if (L >= H) return;

pivot = k[(L+H)/2];

i = L;

j = H;

Link

do{

while (k[i] < pivot) i++;

while (k[j] > pivot) j--;

if (i<=j){

swap(k,i,j);

i++;

j--;

}

}

while (i >= j);

Partition(L,j);

Partition(i,H);

}

Page 12: Cấu Trúc Dữ Liệu Giải Thuật

Tìm kiếm

For each item in the list: if that item has the desired value, return the item's location.

Return Λ.

Tuyế�n tính : Linear Search

Page 13: Cấu Trúc Dữ Liệu Giải Thuật

Tìm kiếm

while (first <= last) { int mid = (first + last) / 2; // compute mid point. if (key > sortedArray[mid]) first = mid + 1; else if (key < sortedArray[mid]) last = mid - 1;

else return mid; // found it. return position ///// } return -1;

Nhị phân: Binary Search

Page 14: Cấu Trúc Dữ Liệu Giải Thuật

Bài toán

In ra màn hình, tất cả các số nguyên có 4 chữ số được tạo từ các số 1,2,3,4

Page 15: Cấu Trúc Dữ Liệu Giải Thuật

Vét cạnmethod Try(i)

For (mọI giá trị V có thể gán cho x[i])thử cho x[i] = Vif (x[i] là phần tử cuối cung)

<thông báo kết quả vừa tìm đc>Else

Ghi nhận x[i] đã nhận gtri V //optionalTry(i+1) // gọi đệ quy chọn tiếp x[i+1]Bỏ Ghi nhận x[i] đã nhận gtri V

//optionalEnd For

end method

Page 16: Cấu Trúc Dữ Liệu Giải Thuật

Đệ quy + quay lui (Vét cạn)

Áp dụng vào bài toán.

Page 17: Cấu Trúc Dữ Liệu Giải Thuật

DAY 3• BFS

• DFS

Page 18: Cấu Trúc Dữ Liệu Giải Thuật

ĐỒ THỊ

Page 19: Cấu Trúc Dữ Liệu Giải Thuật

ĐỒ THỊ

Page 20: Cấu Trúc Dữ Liệu Giải Thuật

BIỂU DIỄN ĐỒ THỊ• Ma trận kề (Adjacency matrix)

• Danh sách cạnh (Edge list)

• Danh sách kề (Adjacency List)

Page 21: Cấu Trúc Dữ Liệu Giải Thuật

Ma trận kề (Adjacency matrix)

Page 22: Cấu Trúc Dữ Liệu Giải Thuật

Danh sách cạnh (Edge list)

Page 23: Cấu Trúc Dữ Liệu Giải Thuật

Danh sách kề (Adjacency List)

Page 24: Cấu Trúc Dữ Liệu Giải Thuật

TÌM KIẾM TRÊN ĐỒ THỊ

• Depth First Search

• Breadth First Search

Page 25: Cấu Trúc Dữ Liệu Giải Thuật

Depth First Search

Page 26: Cấu Trúc Dữ Liệu Giải Thuật

Breadth First Search

Page 27: Cấu Trúc Dữ Liệu Giải Thuật

Breadth First Search

Page 28: Cấu Trúc Dữ Liệu Giải Thuật

Breadth First Search1 procedure BFS(G,v):2 create a queue Q3 enqueue v onto Q4 mark v5 while Q is not empty:6 t ← Q.dequeue()

for all vertex near t do11 if o is not marked:12 mark o13 enqueue o onto Q


Top Related