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

báo cáo cuối kỳ môn cấu trúc dữ liệu và giải thuật

46 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 Cuối Kỳ Môn Cấu Trúc Dữ Liệu Và Giải Thuật
Tác giả Đỗ Minh Nhật
Người hướng dẫn Hồ Thị Thanh Tuyến, Thầy Dung Cẩm Quang
Trường học Trường Đại Học Tôn Đức Thắng
Chuyên ngành Cấu Trúc Dữ Liệu Và Giải Thuật
Thể loại báo cáo
Năm xuất bản 2022
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 46
Dung lượng 1,31 MB

Cấu trúc

  • CHƯƠNG 1 MỞ ĐẦU (0)
    • 1.1 Đệ quy (9)
    • 1.2 Sắp xếp (9)
    • 1.3 Stack (9)
    • 1.4 Cấu trúc dữ liệu Danh sách và Cây (9)
    • 1.5 Đồ thị (9)
  • CHƯƠNG 2 NỘI DUNG (10)
    • 2.1 Đệ quy (10)
      • 2.1.2 Lý thuyết (10)
      • 2.1.3 Thực hành (12)
    • 2.2 Sắp xếp (12)
      • 2.2.1 Câu a (12)
      • 2.2.2 Câu b (0)
    • 2.3 Stack (0)
      • 2.3.1 Câu a (0)
      • 2.3.2 Câu b (0)
    • 2.4 Đồ thị (0)
      • 2.4.1 Lý thuyết (0)
      • 2.4.2 Thực hành (38)
    • 2.5 Cấu trúc dữ liệu Danh sách và Cây (40)
      • 2.5.1 Lý thuyết (40)
      • 2.5.2 Thực hành (41)

Nội dung

1.4 Cấu trúc dữ liệu Danh sách và Cây Bài tập này nói về phân tích, nêu ưu điểm và nhược điểm và so sánh hiệu suất của các cấu trúc dữ liệu Mảng Array, Linked List và cây AVL với các tha

NỘI DUNG

Đệ quy

Sử dụng đệ quy tuyến tính cho bài toán Ta có 2 tham số truyền vào là x tương đương với hệ số và y tương đương với số mũ

Ta có x y = x*x*…*x với y lần Vậy công thức đệ quy sẽ là: x = x*x y y-1

Ta có trường hợp đơn giản (base case) sẽ là y = 0, ta sẽ trả về 1 tương đương với lại x bằng 1, ta sẽ gọi lại hàm với y giảm lần lượt 1 đến khi nào y = 0 Vậy mỗi 0 lần gọi hàm ta sẽ trả về một phép tính đến khi y = 0 thì ta sẽ trả về 1 và tính toán các lần gọi đệ quy trước đó

Ta có ví dụ: Tính 2 5

Hình 2 1 Cây đệ quy bài toán x y Vậy sau khi sử dụng đệ quy, ta tính được 2 5 = 32

Sử dụng đệ nhị phân cho bài toán Ta có tham số truyền vào sẽ là một mảng array chứa các số nguyên và độ dài n của mảng

Ta có để tìm số lớn nhất của một mảng, ta sẽ so sánh lần lượt các số trong mảng để tìm ra số lớn nhất Vậy công thức đệ quy sẽ là: array[n-1] >= FindMax(array, n - 1)

FindMax(array, n − 1), nếu array[n − 1] < array[n − 2]

Ta có trường hợp cơ bản (base case) sẽ là n = 1, ta sẽ trả về array[0] tương đương với phần tử đầu tiên của mảng Ta sẽ gọi hàm so sánh phần tử và phần tử sau nó và gọi lần lượt đến khi nào n = 1 thì ta sẽ trả về phần tử đầu tiên và bắt đầu so sánh phần tử thứ hai và phần tử đầu tiên và trả ngược lại kết quả cho lần gọi đệ quy trước để tiếp tục thực hiện việc so sánh

Ta có ví dụ: Cho mảng array = {1, 5, 8, 4, 12, 20}

Hình 2 2 Cây đệ quy bài toán tìm số lớn nhất trong mảng.

- Câu a: public static int Power(int x,int y){ if(y == 0) return 1; return x*Power(x,y-1);

- Câu b: public static int FindMax(int arr[], int n){ if(n == 1){ return arr[0];

} if(arr[n-1] >= FindMax(arr, n - 1)){ return arr[n-1];

Sắp xếp

Cho một mảng số nguyên gồm 10 phần tử Array = {20, 5, 9, 1, 13, 30, 16, 8,

Ta có giải thuật Selection Sort là một trong các giải thuật sắp xếp mảng và có các bước thực hiện sắp xếp mảng tăng dần như sau:

+ Đầu tiên ta sẽ tạo ra hai vòng lặp for lồng nhau, vòng for đầu tiên có số lần lặp i < n – 1 và chạy từ i = 0 Vòng for thứ hai sẽ có số lần lặp j < n và chạy từ j = i + 1, với n là độ dài mảng

- Từ đỉnh 17, ta thấy rằng đỉnh kề với đỉnh 11 và đỉnh 24 là các đỉnh chưa được duyệt nên ta lựa chọn đỉnh 11 Ta đưa đỉnh 11 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 11, ta thấy rằng đỉnh kề với đỉnh 22 và đỉnh 24 là các đỉnh chưa được duyệt nên ta lựa chọn đỉnh 22 Ta đưa đỉnh 22 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 22, ta thấy rằng đỉnh kề với đỉnh 18 và đỉnh 28 là các đỉnh chưa được duyệt nên ta lựa chọn đỉnh 18 Ta đưa đỉnh 18 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 18, ta thấy rằng đỉnh kề với đỉnh 13, đỉnh 20 và đỉnh 28 là các đỉnh chưa được duyệt nên ta lựa chọn đỉnh 13 Ta đưa đỉnh 13 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 13, ta thấy rằng không còn đỉnh kề chưa được duyệt nên ta lấy đỉnh

13 ra khỏi stack, lúc này đỉnh của stack là đỉnh 18 Từ đỉnh 18, ta thấy rằng đỉnh kề với đỉnh 20 và đỉnh 28 nên ta lựa chọn đỉnh 20 Ta đưa đỉnh 20 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 20, ta thấy rằng đỉnh chỉ kề với đỉnh 24 là đỉnh chưa được duyệt nên ta lựa chọn đỉnh 24 Ta đưa đỉnh 24 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 24, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta sẽ lấy đỉnh 24 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 20 Từ đỉnh 20, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta lấy đỉnh 20 ra khỏi stack, lúc này đỉnh của stack là đỉnh 18

- Từ đỉnh 18, ta thấy rằng đỉnh kề với đỉnh 28 là đỉnh chưa được duyệt nên ta sẽ lựa chọn đỉnh 28 Ta đưa đỉnh 28 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 28, ta thấy rằng đỉnh kề với đỉnh 15 là đỉnh chưa được duyệt nên ta lựa chọn đỉnh 15 Ta đưa đỉnh 15 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 15, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta sẽ lấy đỉnh 15 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 28

- Từ đỉnh 28, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta sẽ lấy đỉnh 28 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 18

- Từ đỉnh 18, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta sẽ lấy đỉnh 18 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 22

- Từ đỉnh 22, ta thấy rằng không còn đỉnh kề nào chưa được duyệt nên ta sẽ lấy đỉnh 22 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 11

- Ta thấy rằng không còn đỉnh kề với đỉnh 11 chưa được duyệt nên ta sẽ lấy đỉnh 11 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 17

- Ta thấy rằng không còn đỉnh kề với đỉnh 17 chưa được duyệt nên ta sẽ lấy đỉnh 17 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 10

- Ta thấy rằng không còn đỉnh kề với đỉnh 10 chưa được duyệt nên ta sẽ lấy đỉnh 10 ra khỏi stack, lúc này ở đỉnh của stack là đỉnh 21

- Từ đỉnh 21, ta thấy rằng không còn đỉnh kề với đỉnh 21 chưa được duyệt nên ta sẽ lấy đỉnh 21 ra khỏi stack, lúc này đỉnh của stack là đỉnh 8

- Từ đỉnh 8, ta thấy rằng không còn đỉnh kề với đỉnh 8 chưa được duyệt nên ta sẽ lấy đỉnh 8 ra khỏi stack, lúc này đỉnh của stack là đỉnh 14

- Từ đỉnh 14, ta thấy rằng không còn đỉnh kề với đỉnh 14 chưa được duyệt nên ta sẽ lấy đỉnh 14 ra khỏi stack, lúc này đỉnh của stack là đỉnh 12

- Từ đỉnh 12, ta thấy rằng đỉnh kề với đỉnh 30 chưa được duyệt nên ta sẽ lựa chọn đỉnh 30, Ta đưa đỉnh 30 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 30, ta thấy rằng không còn đỉnh kề với đỉnh 30 chưa được duyệt nên ta sẽ lấy đỉnh 30 ra khỏi stack, lúc này đỉnh của stack là đỉnh 12

- Từ đỉnh 12, ta thấy rằng không còn đỉnh kề với đỉnh 12 chưa được duyệt nên ta sẽ lấy đỉnh 12 ra khỏi stack, lúc này đỉnh của stack là đỉnh 19

- Từ đỉnh 19, ta thấy rằng không còn đỉnh kề với đỉnh 19 chưa được duyệt nên ta sẽ lấy đỉnh 19 ra khỏi stack, lúc này đỉnh của stack là đỉnh 7

- Từ đỉnh 7, ta thấy rằng đỉnh kề với đỉnh 26 chưa được duyệt nên ta sẽ lựa chọn đỉnh 26, Ta đưa đỉnh 26 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 26, ta thấy rằng không còn đỉnh kề với đỉnh 26 chưa được duyệt nên ta sẽ lấy đỉnh 26 ra khỏi stack, lúc này đỉnh của stack là đỉnh 7

- Từ đỉnh 7, ta thấy rằng không còn đỉnh kề với đỉnh 7 chưa được duyệt nên ta sẽ lấy đỉnh 7 ra khỏi stack, lúc này đỉnh của stack là đỉnh 23

- Từ đỉnh 23, ta thấy rằng không còn đỉnh kề với đỉnh 23 chưa được duyệt nên ta sẽ lấy đỉnh 23 ra khỏi stack, lúc này đỉnh của stack là đỉnh 16

- Từ đỉnh 16, ta thấy rằng không còn đỉnh kề với đỉnh 16 chưa được duyệt nên ta sẽ lấy đỉnh 16 ra khỏi stack, lúc này đỉnh của stack là đỉnh 6

- Từ đỉnh 6, ta thấy rằng không còn đỉnh kề với đỉnh 6 chưa được duyệt nên ta sẽ lấy đỉnh 6 ra khỏi stack, lúc này đỉnh của stack là đỉnh 5

- Từ đỉnh 5, ta thấy rằng đỉnh kề với đỉnh 25 chưa được duyệt nên ta sẽ lựa chọn đỉnh 25, Ta đưa đỉnh 25 vào trong danh sách duyệt và đưa vào trong stack

- Từ đỉnh 25, ta thấy rằng đỉnh kề với đỉnh 29 chưa được duyệt nên ta sẽ lựa chọn đỉnh 29, Ta đưa đỉnh 29 vào trong danh sách duyệt và đưa vào trong stack.

- Ta tiếp tục lấy và kiểm tra các đỉnh kề chưa duyệt đến khi stack rỗng

Vậy kết quả duyệt đồ thị bằng giải thuật DFS là:

2.4.2.1 Câu a public boolean readFileGraph(String path){

String read = ""; int count = 0, j = 0; try{

File in = new File(path);

Scanner myRead = new Scanner(in); vertices = myRead.nextInt(); adj = new int[vertices][vertices];

31 while(myRead.hasNextLine()){ read = myRead.nextLine(); String[] strp = read.split(" "); for(int i=j;i

Ngày đăng: 07/05/2024, 18:24

HÌNH ẢNH LIÊN QUAN

Hình 2. 1  Cây đệ quy  bài toán x .  y Vậy sau khi sử dụng đệ quy, ta tính được 2 5  = 32 - báo cáo cuối kỳ môn cấu trúc dữ liệu và giải thuật
Hình 2. 1 Cây đệ quy bài toán x . y Vậy sau khi sử dụng đệ quy, ta tính được 2 5 = 32 (Trang 10)

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w