cấu trúc dữ liệu giải thuật

28
Cấu Trúc Dữ Liệu Giải Thuậ t YNT HoàNT

Upload: clodia

Post on 07-Feb-2016

78 views

Category:

Documents


0 download

DESCRIPTION

Cấu Trúc Dữ Liệu Giải Thuật. YNT HoàNT. Giải thuật Giải thuật sắp xếp Giải thuật tìm kiếm. Day 1. Đơn vị cấu trúc. Cấu trúc dữ liệu. Bài toán Lựa chọn GT. Giải thuật. Bài toán Lựa chọn GT. Giải thuật. Selection Sort Bubble Sort Quick Sort. Sắp xếp (sorting). - PowerPoint PPT Presentation

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