1. Trang chủ
  2. » Công Nghệ Thông Tin

Các chiến lược phân tích thiết kế giải thuật

25 546 4
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 đề Các Chiến Lược Phân Tích Thiết Kế Giải Thuật
Tác giả Nguyễn Xuân Vũ, Ngô Văn Chơn, Lê Thị Diễm Trinh, Đặng Anh Đào
Người hướng dẫn Th.S Nguyễn Hòa
Trường học Đại Học Sài Gòn
Thể loại bài tập lớn
Thành phố sài gòn
Định dạng
Số trang 25
Dung lượng 883,56 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các chiến lược phân tích thiết kế giải thuật

Trang 1

ĐẠI HỌC SÀI GÒN

PHÂN TÍCH VÀ THIẾT KẾ

GIẢI THUẬT

Giảng viên hướng dẫn : Th.S Nguyễn Hòa

Nhóm sinh viên thực hiện:

Nguyễn Xuân Vũ – 3109410224 Ngô Văn Chơn – 3109410016

Lê Thị Diễm Trinh – 3109410196 Đặng Anh Đào – 3109410030

Trang 2

I Chiến lược thiết kế trực tiếp

1 Bài toán tìm cặp điểm gần nhau

for ( int i = 0; i < d.Length; i++)

for ( int j = i + 1; j < d.Length; j++) {

double k = Math Sqrt((d[i].x - d[j].x) * (d[i].x - d[j].x) + (d[i].y- d[j].y) * (d[i].y - d[j].y));

if (k < Dmin) {

Dmin = k;

A.x = i; A.y = j;

} }

Thời gianMảng

d Giao diện chương trình demo

Trang 3

2 Bài toán tìm chuỗi mẫu

a Thuật toán

public int BruteForceStringMatch()

{

int lchuoi = chuoi.Length;

int lchuoimau = chuoimau.Length;

for ( int i = 0; i < lchuoi-lchuoimau+1; i++) {

Trang 4

- Trường hợp xấu nhất thực hiện n-m+1 chuyến so sánh mỗi chuyến thực hiện m lần so các ký tự, T(n) = O(nm)

d Giao diện chương trình demo

II Chiến lược thiết kế quy hoạch động

1 Bài toán Fibonacci

Trang 5

a[1] = a[2];

a[2] = a[0] + a[1];

- Thời gian tính toán thao tác cơ bản là C

- Độ phức tạp bài toán là T(n) = O(n)

Trang 6

3 Bài toán Robot

Trang 7

b[i, j] = Max(b[i - 1, j], b[i, j - 1]) + a[i, j];

- Thời gian tinhs toán thao tác cơ bản là C

d Giao diện chương trình demo

4 Bài toán người đi du lịch

a Thuật toán

public void TravelingSalesman()

Trang 8

{

Queue < int > T = new Queue < int >(); // mảng chứa chu trinh

Stack < int > Road = new Stack < int >(); // Mảng đường đi

for ( int i = 1; i < _N; i++)

Random ran = new Random ();

for ( int i = 0; i < n; i++)

/* Tạo n! đường và tìm chi phí nhỏ nhất */

private void Compute( Queue < int > T, Stack < int > Road)

Trang 9

for ( int i = 1; i < Road.Count; i++)

tong += a[_Road[i], _Road[i - 1]];

Trang 10

5 Bài toán Dijsktra

a Giải thuật

public bool Dijkstra(int s)

{

int[] Mark = new int[n]; // dùng để! lưu lại đỉ!nh chưa dc chọn

int[] d = new int[n]; // lưu độ dài đường đi

int[] pr = new int[n]; // dùng để! lưu lại đỉ!nh trước

for (int i = 0; i < n; i++)

if (Mark[i] == 0 && d[i] < min)

for(int i=0;i<n;i++)

if (Mark[i] == 0 && a[s, i] > 0 && (d[k] + a[k,i] < d[i]))

Trang 11

{ //kho!i tạo max values

for (int i = 0; i < n; i++) {

d[i] = 1000000;

mark[i] = 0; // đỉ!nh chưa dc chọn

pr[i] = s; // đỉ!nh trước là s

} // khở!i tạo đường đi đau tiển

for (int i = 0; i < n; i++) {

if (a[s, i] > 0) d[i] = a[s, i];

} d[s] = 0; mark[s] = 1; // đã lấ@y dc đỉ!nh s

}

b Độ phức tạp

- Kích thước đầu vào là n

- Phép toán cơ bản là phép so sánh

if (Mark[i] == 0 && a[s, i] > 0 && (d[k] + a[k, i] < d[i]))

- g i C là th i gian th c hi n thao tác c b n ọi C là thời gian thực hiện thao tác cơ bản ời gian thực hiện thao tác cơ bản ực hiện thao tác cơ bản ện thao tác cơ bản ơ bản ản T(n) = O(n2)

- Thời gian truy tìm đường đi sau khi có kết quả là O(n)

d Giao diện chương trình demo

Trang 12

PHÂN TÍCH THIẾT KẾ GIẢI THUẬT

1 Tìm kiếm Sequential Search

Trang 13

- Output: Vị trí của k trong mảng hoặc -1 nếu không tìm thấy

- Phép toán cơ bản là phép so sánh “i < arr.Length-1

d Giao diện chương trình demo

2 Binary Search

Trang 14

- Input: mảng A, khóa key

- Output: vị trí key trong mảng hoặc trả về giá trị -1 nếu không tìm thấy.

d Giao diện chương trình demo

Trang 15

- Input: mảng arr chưa được sắp xếp

- Output: mảng arr được sắp xếp

- Thao tác cơ bản là thao tác so sánh “ if (arr[j] < arr[min])”

Trang 16

100000 20.3945745

020000

for (int i = 0; i < arr.Length - 1; i++)

for (int j = 0; j < arr.Length - 1; j++)

- Input: mảng arr chưa được sắp xếp

- Output: mảng arr được sắp xếp tăng dần

- Thao tác cơ bản là so sánh if (arr[j + 1] < arr[j])

Trang 18

}

}

b Độ phức tạp

- Input: mảng arr chưa sắp xếp.

- Output: mảng arr được sắp xếp

- Thao tác cơ bản la so sánh “arr[j]> temp”

Trang 19

int i,j,k;

int[] L= new int [n1+1];

int[] R= new int [n2+1];

- Độ phức tạp của giải thuật Merge() là O(n),

- Thời gian chạy của giải thuật MergeSort() là T(n)= 2T(n/2)+O(n) ,n>1

Áp dụng định lý Master suy ra độ phức tạp T(n)= O(nlog2n).

Trang 22

9 Bài toán cái túi.

Trang 23

}

b Độ phức tạp

- Kích thước đầu vào là n và W

- Thao tác cơ bản là so sánh if (w[i] <= j)

Trang 24

for (int i = 2; i < C.Length; i++)

- Kích thước đầu vào là n

- Thao tác cơ bản là so sánh if (C[i] + F[i - 2] > F[i - 1])

Trang 25

11 Thuật toán tháp hà nội

b Độ phức tạp

T(n)= 2n -1

Ngày đăng: 08/04/2013, 00:43

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w