1. Trang chủ
  2. » Trung học cơ sở - phổ thông

Giáo trình Cấu trúc dữ liệu và giải thuật - ĐH Sư phạm Kỹ thuật Hưng Yên

20 50 1

Đ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

Định dạng
Số trang 20
Dung lượng 214,95 KB

Nội dung

Để xác định được giải thuật phù hợp cần phải biết nó tác động đến loại dữ liệu nào (ví dụ để làm nhuyễn các hạt đậu , người ta dùng cách xay chứ không băm bằng dao, vì đậu sẽ văng ra ngo[r]

(1)

Cấu trúc liệu giải thuật Biên tập bởi:

(2)

Cấu trúc liệu giải thuật Biên tập bởi:

Khoa CNTT ĐHSP KT Hưng Yên Các tác giả:

Khoa CNTT ĐHSP KT Hưng Yên

(3)

MỤC LỤC

1 Giải thuật cấu trúc liệu Phân tích thiết kế tốn

3 Phân tích thời gian thực thuật tốn Mảng dánh sách

5 Danh sách nối đơn (Singlely Linked List) Thực hành cài đặt danh sách nối đơn Danh sách tuyến tính ngăn xếp (Stack) Danh sách tuyến tính kiểu hàng đợi

9 Thực hành đặt danh sách kiểu hàng đợi 10 Danh sách nối vòng nối kép

11 Thực hành cài đặt danh sách liên kết kép 12 Kiểu liệu

13 Thực hành cài đặt nhị phân 14 Cây nhị phân ứng dụng

(4)

Giải thuật cấu trúc liệu

GIẢI THUẬT

Khi viết chương trình máy tính, ta thường cài đặt phương pháp nghĩ trước để giải vấn đề Phương pháp thường độc lập với máy tính cụ thể dùng để cài đặt: thích hợp cho nhiều máy tính Trong trường hợp nào, thìphương pháp, khơng phải thân chương trình máy tính nghiên cứu để học cách làm để công vào toán từ “Giải thuật” hay “Thuật toán” dùng khoa học máy tính để mơ tả phương pháp giải tốn thích hợp cài đặt chương trình máy tính Giải thuật chúng đối tượng nghiên cứu trung tâm hầu hết lĩnh vực Tin học

Các chương trình máy tính thường tối ưu, không cần thuật toán tối ưu, trừ thuật tốn dùng lại nhiều lần Nếu khơng cần cài đặt đơn giản cẩn thận đủ để ta tin tưởng hoạt động tốt chạy chậm đến mười lần phiên tốt, điều có nghĩa chạy chậm vài giây, ta chọn thiết kế cài đặt tối ưu phức tạp từ đầu tốn nhiều phút, nhiều giờ… Do ta xem xét cài đặt hợp lý đơn giản thuật tốn tốt

Thơng thường để giải tốn ta có lựa chọn nhiều thuật toán khác, việc lựa chọn thuật tốn tốt vấn đề tương đối khó khăn phức tạp, thường cần đến trình phân tích tinh vi tin học

Khái niệm Giải thuật có từ lâu nhà tốn học người Arập phát ngơn, thuật tốn tiếng có từ thời cổ Hylạp thuật tốn Euclid (thuật tốn tìm ước số chung lớn số)

Phương pháp cộng, nhân, chia… hai số giải thuật… Trong Tin học khái niệm giải thuật trình bày sau:

Giải thuật câu lệnh (Statements) chặt chẽ rõ ràng xác định trình tự các thao tác số đối tượng cho sau số hữu hạn bước thực ta đạt được kết mong muốn

(Thuật toán dãy hữu hạn bước, bước mơ tả xác phép toán hành động cần thực hiện, để giải vấn đề)

(5)

MỐI QUAN HỆ GIỮA CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Thực đề án tin học chuyển toán thực tế thành tốn giải máy tính Một tốn thực tế bao gồm đối tượng liệu yêu cầu xử lý đối tượng Vì thế, để xây dựng mơ hình tin học phản ánh toán thực tế cần trọng đến hai vấn đề :

Tổ chức biểu diễn đối tượng thực tế :

Các thành phần liệu thực tế đa dạng, phong phú thường chứa đựng quan hệ với nhau, mơ hình tin học tốn, cần phải tổ chức , xây dựng cấu trúc thích hợp cho vừa phản ánh xác liệu thực tế này, vừa dễ dàng dùng máy tính để xử lý Cơng việc gọi xây dựng

cấu trúc liệucho toán

Xây dựng thao tác xử lý liệu:

Từ yêu cầu xử lý thực tế, cần tìm giải thuật tương ứng để xác định trình tự thao tác máy tính phải thi hành kết mong muốn, bước xây dựng

giải thuậtcho toán

Tuy nhiên giải tốn máy tính, thường có khuynh hướng trọng đến việc xây dựng giải thuật mà quên tầm quan trọng việc tổ chức liệu toán Giải thuật phản ánh phép xử lý , đối tượng xử lý giải thuật lại liệu, liệu chứa đựng thơng tin cần thiết để thực giải thuật Để xác định giải thuật phù hợp cần phải biết tác động đến loại liệu (ví dụ để làm nhuyễn hạt đậu , người ta dùng cách xay khơng băm dao, đậu văng ngồi) chọn lựa cấu trúc liệu cần phải hiểu rõ thao tác tác động đến (ví dụ để biểu diễn điểm số sinh viên người ta dùng số thực thay chuỗi ký cịn phải thực thao tác tính trung bình từ điểm số đó) Như đề án tin học, giải thuật cấu trúc liệu có mối quan hệ chặt chẽ với nhau, thể qua công thức :

Cấu trúc liệu + Giải thuật = Chương trình

(6)

Ví dụ 1.1: Một chương trình quản lý điểm thi sinh viên cần lưu trữ điểm số sinh viên Do sinh viên có điểm số ứng với mơn học khác nên liệu có dạng bảng sau:

Sinh viên Môn Môn Môn3 Môn4

SV

SV

SV

Chỉ xét thao tác xử lý xuất điểm số mơn sinh viên Giả sử có phương án tổ chức lưu trữ sau:

Phương án : Sử dụng mảng chiều

Có tất 3(SV)*4(Môn) = 12 điểm số cần lưu trữ, khai báo mảngresult sau : int result [ 12 ] = {7, 9, 5, 2,5, 0, 9, 4,6, 3, 7, 4};

khi mảngresultcác phần tử lưu trữ sau:

Và truy xuất điểm số môn j sinh viên i phần tử (dòng i, cột j) bảng -phải sử dụng công thức xác định số tương ứng mảng result:

bảngđiểm(dòng i, cột j) ⇒ result[((i-1)*số cột) + j]

Ngược lại, với phần tử mảng, muốn biết điểm số sinh viên nào, mơn gì, phải dùng cơng thức xác định sau

(7)

sv = i/so_mon; mon = i % so_mon;printf("Điểm môn %d sv %d là: %d", mon, sv, result[i]);

} }

Phương án : Sử dụng mảng chiều

Khai báo mảng chiềuresult có kích thước dịng* cột sau : int result[3][4] ={{ 7, 9, 5, 2},{ 5, 0, 9, 4},{ 6, 3, 7, }};

khi mảngresultcác phần tử lưu trữ sau : Cột Cột Cột Cột

Dòng result[0][0]=7 result[0][1]=9 result[0][2]=5 result[0][3] =2 Dòng result[1][0]=5 result[1][1]=0 result[1][2]=9 result[1][3]= Dòng result[2][0]=6 result[2][1]=3 result[2][2]=7 result[2][3]=

Và truy xuất điểm số môn j sinh viên i phần tử (dịng i, cột j) bảng -cũng phần tử nằm vị trí (dịng i, cột j) mảng

bảngđiểm(dòng i,cột j) ⇒ result[ i] [j]

Với phương án này, thao tác xử lý cài đặt sau : void XuatDiem() //Xuất điểm số tất sinh viên {

int so_mon = 4, so_sv =3;for ( int i=0; i<so_sv; i+) for ( int j=0; i<so_mon; j+) printf("Điểm môn %d sv %d là: %d", j, i, result[i][j]);

}

NHẬN XÉT

(8)

CÁC TIÊU CHUẨN ĐÁNH GIÁ CẤU TRÚC DỮ LIỆU

Do tầm quan trọng trình bày phần 1.1, thiết phải trọng đến việc lựa chọn phương án tổ chức liệu thích hợp cho đề án Một cấu trúc liệu tốt phải thỏa mãn tiêu chuẩn sau :

Phản ánh thực tế :

Đây tiêu chuẩn quan trọng nhất, định tính đắn tồn tốn Cần xem xét kỹ lưỡng dự trù trạng thái biến đổi liệu chu trình sống để chọn cấu trúc liệu lưu trữ thể xác đối tượng thực tế

Ví dụ 1.2 :Một số tình chọn cấu trúc lưu trữ sai :

- Chọn biến số nguyên int để lưu trữ tiền thưởng bán hàng (được tính theo cơng thức tiền thưởng bán hàng = trị giá hàng * 5%), làm tròn giá trị tiền thưởng gây thiệt hại cho nhân viên bán hàng Trường hợp phải sử dụng biến số thực để phản ánh kết cơng thức tính thực tế

- Trong trường trung học, lớp nhận tối đa 28 học sinh Lớp có 20 học sinh, tháng học sinh đóng học phí $10 Chọn biến số nguyên unsigned char ( khả lưu trữ - 255) để lưu trữ tổng học phí lớp học tháng, xảy trường hợp có thêm học sinh nhận vào lớp giá trị tổng học phí thu $260, vượt khỏi khả lưu trữ biến chọn, gây tình trạng tràn, sai lệch Phù hợp với thao tác đó:

Tiêu chuẩn giúp tăng tính hiệu đề án: việc phát triển thuật tốn đơn giản, tự nhiên hơn; chương trình đạt hiệu cao tốc độ xử lý

Ví dụ 1.3 :Một tình chọn cấu trúc lưu trữ khơng phù hợp:

Cần xây dựng chương trình soạn thảo văn bản, thao tác xử lý thường xảy chèn, xoá sửa ký tự văn Trong thời gian xử lý văn bản, chọn cấu trúc lưu trữ văn trực tiếp lên tập tin gây khó khăn xây dựng giải thuật cập nhật văn làm chậm tốc độ xử lý chương trình phải làm việc nhớ ngồi Trường hợp nên tìm cấu trúc liệu tổ chức nhớ để lưu trữ văn suốt thời gian soạn thảo

LƯU Ý :

(9)

Tiết kiệm tài nguyên hệ thống:

Cấu trúc liệu nên sử dụng tài nguyên hệ thống vừa đủ để đảm nhiệm chức Thơng thường có loại tài ngun cần lưu tâm : CPU nhớ Nếu tổ chức sử dụng đề án cần có xử lý nhanh chọn cấu trúc liệu yếu tố tiết kiệm thời gian xử lý phải đặt nặng tiêu chuẩn sử dụng tối ưu nhớ, ngược lại

Ví dụ 1.4:Một số tình chọn cấu trúc lưu trữ lãng phí:

(10)

Phân tích thiết kế toán

CÁC BƯỚC CƠ BẢN ĐỂ GIẢI QUYẾT BÀI TỐN

Xác định tốn

Input → Process → Output (Dữ liệu vào → Xử lý → Kết ra)

Việc xác định toán tức phải xác định xem ta phải giải vấn đề gì?, với giả thiết cho lời giải cần phải đạt yêu cầu Khác với toán tuý toán học cần xác định rõ giả thiết kết luận không cần xác định yêu cầu lời giải, toán tin học ứng dụng thực tế cần tìm lời giải tốt tới mức đó, chí tồi mức chấp nhận Bởi lời giải tốt đòi hỏi nhiều thời gian chi phí

Ví dụ 2.1:

Khi cài đặt hàm số phức tạp máy tính Nếu tính cách khai triển chuỗi vơ hạn độ xác cao thời gian chậm hàng tỉ lần so với phương pháp xấp xỉ Trên thực tế việc tính tốn ln ln cho phép chấp nhận sai số nên hàm số máy tính tính phương pháp xấp xỉ giải tích số Xác định yêu cầu tốn quan trọng ảnh hưởng tới cách thức giải chất lượng lời giải Một tốn thực tế thường cho thơng tin mơ hồ hình thức, ta phải phát biểu lại cách xác chặt chẽ để hiểu tốn

Ví dụ 2.2:

Bài tốn: Một dự án có n người tham gia thảo luận, họ muốn chia thành nhóm nhóm thảo luận riêng phần dự án Nhóm có người trình lên nhiêu ý kiến Nếu lấy nhóm ý kiến đem ghép lại ý kiến triển khai dự án Hãy tìm cách chia để số ý kiến cuối thu lớn

Phát biểu lại: Cho số nguyên dương n, tìm phân tích n thành tổng số nguyên dương cho tích số lớn

(11)

Tìm cấu trúc liệu biểu diễn toán

Khi giải toán, ta cần phải định nghĩa tập hợp liệu để biểu diễn tình trạng cụ thể Việc lựa chọn tuỳ thuộc vào vấn đề cần giải thao tác tiến hành liệu vào Có thuật tốn thích ứng với cách tổ chức liệu định, cách tổ chức liệu khác hiệu khơng thể thực Chính nên bước xây dựng cấu trúc liệu tách rời bước tìm kiếm thuật tốn giải vấn đề

Các tiêu chuẩn lựa chọn cấu trúc liệu

• Cấu trúc liệu trước hết phải biểu diễn đầy đủ thông tin nhập xuất tốn

• Cấu trúc liệu phải phù hợp với thao tác thuật toán mà ta lựa chọn để giải tốn

• Cấu trúc liệu phải cài đặt máy tính với ngơn ngữ lập trình sử dụng

Đối với số toán, trước tổ chức liệu ta phải viết đoạn chương trình nhỏ để khảo sát xem liệu cần lưu trữ lớn tới mức độ

Xác định thuật toán

Thuật toán hệ thống chặt chẽ rõ ràng quy tắc nhằm xác định dãy thao tác cấu trúc liệu cho: Với liệu vào, sau số hữu hạn bước thực thao tác ra, ta đạt mục tiêu định

Các đặc trưng thuật tốn • Tính đơn nghĩa

Ở bước thuật toán, thao tác phải rõ ràng, không gây nên nhập nhằng, lộn xộn, tuỳ tiện, đa nghĩa

(12)

• Tính dừng

Thuật tốn khơng rơi vào q trình vơ hạn, phải dừng lại cho kết sau số hữu hạn bước

• Tính

Sau thực tất bước thuật toán theo trình định, ta phải kết mong muốn với liệu đầu vào Kết kiểm chứng u cầu tốn

• Tính phổ dụng

Thuật tốn phải dễ sửa đổi để thích ứng với tốn lớp tốn làm việc liệu khác

Tính khả thi

• Kích thước phải đủ nhỏ: Ví dụ: Một thuật tốn có tính hiệu lượng nhớ mà yêu cầu vượt khả lưu trữ hệ thống máy tính • Thuật tốn phải chuyển thành chương trình: Ví dụ thuật tốn u cầu

phải biểu diễn số vơ tỉ với độ xác tuyệt đối không thực với hệ thống máy tính

• Thuật tốn phải máy tính thực thời gian cho phép, điều khác với lời giải toán (Chỉ cần chứng minh kết thúc sau hữu hạn bước) Ví dụ xếp thời khố biểu cho học kỳ khơng thể cho máy tính chạy tới học kỳ sau

Ví dụ 2.3:

Input: số nguyên tự nhiên a b không đồng thời Output: Ước số chung lớn a b

Thuật tốn tiến hành mơ tả sau: (Thuật toán Euclide) Bước (Input): Nhập a b: Số tự nhiên

Bước 2: Nếu b ≠ chuyển sang bước 3, khơng bỏ qua bước 3, làm bước Bước 3: Đặt r = a mod b; Đặt a = b; Đặt b = r; Quay trở lại bước

(13)

Khi mơ tả thuật tốn ngơn ngữ tự nhiên, ta không cần phải chi tiết bước tiến trình thực mà cần mơ tả cách hình thức đủ để chuyển thành ngơn ngữ lập trình Viết sơ đồ thuật tốn đệ quy ví dụ

Đối với thuật tốn phức tạp nặng tính tốn, bước công thức nên mô tả cách tường minh thích rõ ràng để lập trình ta nhanh chóng tra cứu

Đối với thuật tốn kinh điển phải thuộc Khi giải toán lớn thời gian giới hạn, ta phải thiết kế tổng thể chỗ thuộc việc lắp ráp vào

Tính đắn mô-đun thuộc ta không cần phải quan tâm mà tập trung giải phần khác

Lập trình

Sau có thuật tốn, ta phải tiến hành lập trình thể thuật tốn Muốn lập trình đạt hiệu cao, cần phải có kỹ thuật lập trình tốt Kỹ thuật lập trình tốt thể kỹ viết chương trình, khả gỡ rối thao tác nhanh Lập trình tốt khơng phải cần nắm vững ngơn ngữ lập trình đủ, phải biết cách viết chương trình uyển chuyển phát triển để chuyển ý tưởng thành chương trình hồn chỉnh Kinh nghiệm cho thấy thuật toán hay cài đặt vụng nên chạy lại cho kết sai tốc độ chậm

Thông thường, ta không nên cụ thể hố tồn chương trình mà nên tiến hành theo phương pháp tinh chế bước (Stepwise refinement):

• Ban đầu, chương trình thể ngơn ngữ tự nhiên, thể thuật tốn với bước tổng thể, bước nêu lên công việc phải thực • Một cơng việc đơn giản đoạn chương trình học thuộc ta

tiến hành viết mã lệnh ngơn ngữ lập trình

• Một cơng việc phức tạp ta lại chia thành cơng việc nhỏ để lại tiếp tục với công việc nhỏ

Trong q trình tinh chế bước, ta phải đưa biểu diễn liệu Như với tinh chế công việc, liệu tinh chế dần, có cấu trúc hơn, thể rõ mối liên hệ liệu

(14)

Kiểm thử

Chạy thử tìm lỗi

Chương trình người viết ra, mà người nhầm lẫn Một chương trình viết xong chưa chạy máy tính kết mong muốn Kỹ tìm lỗi, sửa lỗi, điều chỉnh lại chương trình kỹ quan trọng người lập trình Kỹ có kinh nghiệm tìm sửa chữa lỗi

Có ba loại lỗi:

• Lỗi cú pháp: Lỗi hay gặp lại dễ sửa nhất, cần nắm vững ngôn ngữ lập trình đủ Một người coi khơng biết lập trình khơng biết sửa lỗi cú pháp

• Lỗi cài đặt: Việc cài đặt thể khơng thuật tốn định, lỗi phải xem lại tổng thể chương trình, kết hợp với chức gỡ rối để sửa lại cho

• Lỗi thuật tốn: Lỗi gặp nguy hiểm nhất, nhẹ phải điều chỉnh lại thuật tốn, nặng có phải loại bỏ hồn tồn thuật tốn sai làm lại từ đầu

Xây dựng test

Có nhiều chương trình khó kiểm tra tính đắn Nhất ta kết nào? Vì chương trình chạy kết (không biết sai nào) việc tìm lỗi khó khăn Khi ta nên làm test để thử chương trình

Các test nên đặt file văn bản, việc tạo file văn nhanh lần chạy thử cần thay tên file liệu vào xong, không cần gõ lại test từ bàn phím Kinh nghiệm làm test là:

Bắt đầu với test nhỏ, đơn giản, làm tay có đáp số để so sánh với kết chương trình chạy

Tiếp theo test nhỏ, chứa giá trị đặc biệt tầm thường Kinh nghiệm cho thấy test dễ sai

Các test phải đa dạng, tránh lặp lặp lại test tương tự

(15)

Lưu ý chương trình chạy qua hết test khơng có nghĩa chương trình Bởi ta chưa xây dựng test làm cho chương trình chạy sai Vì có thể, ta nên tìm cách chứng minh tính đắn thuật tốn chương trình, điều thường khó

Tối ưu chương trình

Một chương trình chạy khơng có nghĩa việc lập trình xong, ta phải sửa đổi lại vài chi tiết để chương trình chạy nhanh hơn, hiệu Thông thường, trước kiểm thử ta nên đặt mục tiêu viết chương trình cho đơn giản, chạy kết được, sau tối ưu chương trình, ta xem lại chỗ viết chưa tốt tối ưu lại mã lệnh để chương trình ngắn hơn, chạy nhanh Không nên viết tới đâu tối ưu mã đến đó, chương trình có mã lệnh tối ưu thường phức tạp khó kiểm sốt

Việc tối ưu chương trình nên dựa tiêu chuẩn sau: • Tính tin cậy

Chương trình phải chạy dự định, mô tả giải thuật Thơng thường viết chương trình, ta ln có thói quen kiểm tra tính đắn bước

• Tính uyển chuyển

Chương trình phải dễ sửa đổi Bởi có chương trình viết hoàn hảo mà cần phải sửa đổi lại Chương trình viết dễ sửa đổi làm giảm bớt cơng sức lập trình viên phát triển chương trình

• Tính sáng

Chương trình viết phải dễ đọc dễ hiểu, để sau thời gian dài, đọc lại cịn hiểu làm gì? Để có điều kiện cịn sửa sai (nếu phát lỗi mới), cải tiến hay biến đổi để chương trình giải tốn khác Tính sáng chương trình phụ thuộc nhiều vào cơng cụ lập trình phong cách lập trình

• Tính hữu hiệu

(16)

Từ phân tích trên, nhận thấy việc làm chương trình địi hỏi nhiều cơng đoạn tiêu tốn nhiều công sức Chỉ công đoạn không hợp lý làm tăng chi phí viết chương trình Nghĩ cách giải vấn đề khó, biến ý tưởng thành thực khơng dễ chút

Những cấu trúc liệu giải thuật đề cập tới chuyên đề kiến thức phổ thơng, người học lập trình khơng sớm muộn phải biết tới Chỉ hy vọng học xong chuyên đề này, qua cấu trúc liệu giải thuật mẫu mực, rút học kinh nghiệm: Đừng viết chương trình mà chưa suy xét kỹ giải thuật liệu cần thao tác, ta dễ mắc phải hai sai lầm trầm trọng: sai giải thuật, giải thuật triển khai cấu trúc liệu không phù hợp Chỉ cần mắc hai lỗi thơi nguy sụp đổ tồn chương trình hồn tồn có thể, cố chữa bị rối, khả chắn phải làm lại từ đầu

MODUL HĨA VÀ VIỆC GIẢI QUYẾT BÀI TỐN

Trong thực tế tốn giải máy tính điện tử ngày nhiều phức tạp Các giải thuật ngày có qui mơ lớn khó thiết lập

Để đơn giản hoá toán người ta tiến hành phân chia toán lớn thành tốn nhỏ Có nghĩa tốn lớn modul cần chia thành modul con, đến lượt modul lại chia tiếp thành modul khác ứng với phần việc mà người ta biết cách giải Việc tổ chức lời giải tốn thực theo cấu trúc phân cấp sau :

(17)

rồi sau dần vào giải phần cụ thể cách chi tiết hơn(gọi cách thiết kế từ khái quát đến chi tiết)

Ví dụ : Chủ tịch hội đồng xét cấp học bổng nhà trường yêu cầu chúng ta:

“ Dùng máy tính điện tử để quản lý bảo trì hồ sơ học bổng sinh viên diện tài trợ, đồng thời thường kỳ phải lập báo cáo tổng kết để đệ trình lên Bộ” Như trước hết ta phải hình dung cụ thể đầu vào đầu tốn Có thể coi ta có tập hồ sơ (file) bao gồm ghi (records) thông tin liên quan đến học bổng sinh viên : Mã SV, Điểm TB, điểm đạo đức, khoản tiền tài trợ Và chương trình lập phải tạo điều kiện cho người sử dụng giải yêu cầu sau:

1 Tìm lại hiển thị ghi sinh viên thiết bị cuối (terminal) người dùng

2 Cập nhật (update) ghi sinh viên cho trước cách thay đổi điểm trung bình, điểm đạo đức, khoản tiền tài trợ cần

3 In bảng tổng kết chứa thông tin thời (đã cập nhật có thay đổi) gồm số liệu, điểm trung bình, điểm đạo đức, khoản tiền tài trợ, cần

Xuất phát từ nhận định trên, giải thuật xử lý phải giải nhiệm vụ sau:

1 Những thông tin sinh viên học bổng, lưu trữ đĩa phải đọc vào nhớ để xử lý (gọi nhiệm vụ “đọc tệp”)

2 Xử lý thồng tin để tạo kết mong muốn (nhiệm vụ “xử lý tệp”) Sao chép thông tin cập nhật vào tệp đĩa để lưu trữ cho việc

(18)

Các nhiệm vụ mức đầu tương đối phức tạp thường chia thành nhiệm vụ Chẳng hạn, nhiệm vụ “xử lý tệp” phân thành nhiệm vụ tương ứng giải u cầu nêu trên:

1 Tìm lại ghi sinh viên cho trước Cập nhật thông tin ghi sinh viên

3 In bảng tổng kết thông tin sinh viên học bổng

Những nhiệm vụ lại chia nhỏ thành nhiệm vụ theo sơ đồ sau:

Cách thiết kế giải thuật theo kiểu top - down giúp cho việc giải toán định hướng rõ ràng, dễ dàng thực tảng cho việc lập trình cấu trúc

PHƯƠNG PHÁP TINH CHỈNH DẦN TỪNG BƯỚC (Stepwise refinement)

Tinh chỉnh bước phương pháp thiết kế giải thuật gắn liền với lập trình Nó phản ánh tinh thần q trình modul hố tốn thiết kế kiểu top - down

Phương pháp tiến hành theo sơ đồ:

CTDL → CTDL lưu trữ → Cách cài đặt DL hợp lý → CTDL tiền định

(19)

Ví dụ 2.4: Giả sử ta muốn lập chương trình xếp dãy n số nguyên khác theo thứ tự tăng dần

Giải thuật phác thảo cách thủ cơng đơn giản sau:“ Coi phần tử dãy số phần tử véc tơ (có cấu trúc mảng chiều) dãy lưu trữ vec tơ lưu trữ gồm n từ máy nhớ (a1, a2, , an) từ lưu trữ phần tử thứ i (1 ≤ i ≤ n) dãy số Qui ước dãy số xếp để chỗ cũ cho

Từ số cho chọn số nhỏ nhất, đặt vào cuối dãy xếp Sau tiến hành so sánh với số vị trí khác với số phải tiến hành đổi chỗ Công việc lặp lại dãy số chưa xếp trở thành rỗng”

Bước tinh chỉnh thực nhờ ngôn ngữ tựa C sau:

For(int i=1,i ≤ n, i++) {

+ Xét từ a i đến a n để tìm số nhỏ a j + Đổi chỗ aj}

Các bước tiến hành:

+ B1: Xét dãy cho Tìm số nguyên nhỏ ajtrong số từ aiđến an + B2: Đổi chỗ ajvà

Nhiệm vụ đầu thực cách:

Thoạt tiên coi làsố nhỏ nhấttạm thời; so sánh với ai+1,ai+2, Khi đã so sánh với an số nhỏ xác định.”

Để xác định ta phải vị trí nó, hay nói cách khác nắm số phần tử thông qua khâu trung gian:

(20)

if ( a k < a j ) j=k;

{Bước tinh chỉnh 2}

B = a i ; a i = a j ; a j = B;

Sau chỉnh lại cách viết biến số cho với qui ước ta có chương trình xếp hoàn chỉnh viết dạng thủ tục sau:

Void Sort(A,n)

{các biến i,j,k kiểu nguyên; biến trung gian B kiểu A} For(int i=1,i ≤ n, i++)

{

2- {Chọn số nhỏ nhất} j =i;

For(int k=j+1,k ≤ n, k++)

if ( A[k] < A[j] ) j = k;

1 {Đổi chỗ} B = A[i]; A[i]= A[j]; A[j] = B; }

Ví dụ 2: Cho ma trận vng n × n số nguyên Hãy in phần tử thuộc đường chéo song song với đường chéo theo thứ tự tính từ phải sang trái

Chọn cách in từ phải sang trái ta có kết quả: a14

http://voer.edu.vn/c/60bbf7d3

Ngày đăng: 08/03/2021, 17:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w