1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình cấu trúc dữ liệu và giải thuật phần 1 ths nguyễn thị hương

66 1 0

Đ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

Nội dung

G IA O T R IN H NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT B ộ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC THÁI NGUYÊN ThS NGUYỄN THỊ HƯƠNG GIÁO TRÌNH CẤU TRÚC D ữ LIỆU VÀ GIẢI THUẬT m NHÀ XUẤT BẢN KHOA HỌC KỸ THUẬT H Nội - 2010 Cliịu tráclĩ nhiệm xuất bản: TS P h ạm V ăn D iễn Biên tập: M in h L u ận - P h n g L iên Trình bày bìa: T hùy D ương K NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT 70 - TRẦN HUNG ĐẠO - HÀ NỘI In 220 khổ 15,5x22,5 Nhà in Thanh Bình Sơ' đăng ký KHXB: 215 - 2010/CXB/367 - 17/KHKT ngày 5/3/2010 Quyết định xuất số: 119/QĐXB - NXBKHKT ngày 5/7/2010 In xong nộp lưu chiểu tháng 7/2010 LỜI NÓI ĐẦU Môn học Cấu trúc liệu giải thuật môn học sở ngành khoa học máy tính Mơn học giúp sinh viên làm quen với kiến thức cấu trúc liệu giải thuật có liên quan Từ tạo điều kiện cho việc nâng cao thêm kỹ thuật lập trình phương pháp giải tốn, giúp sinh viên có khả sâu thêm vào mơn học chương trình dịch, trí tuệ nhân tạo, hệ chuyên gia Nội dung giáo trình gồm ba phần: Phần 1: Giới thiệu kiến thức phân tích thiết kế giải thuật Đưa nhìn khái qt trcng việc phân tích toán, lựa chọn giải thuật đánh giá giải thuật Phần 2: Tập trung vào việc tìm hiểu cấu trúc liệu, tò việc tổ chức xây dựng cấu trúc, tổ chức lưu trữ, đến thao tác cấu trúc ứng dụng cấu trúc liệu Phần 3: Giải hai vấn đề quan trọng lập trình, xếp tìm kiếm Các giải thuật sáp xếp tìm kiếm đưa giải thuật áp dụng nhiều thực tế, từ giải thuật với độ phức tạp cao, đến giải thuật nâng cao Phần - GIẢI THUẬT Chương - MỞ ĐẦU 1.1 Giải thuật cấu trúc liệu Giải thuật (statement): Là dãy câu lệnh chặt chẽ rõ ràng, xác định trình tự thao tác ưên số đối tượng đó, cho sau số hữu hạn bước thực hiện, cho ta kết mong muốn Giải thuật phản ánh phép xử lý Dữ liệu (data): Biểu diễn thông tin cần thiết cho toán, đối tượng để xử lý máy tính Các phần tà liệu thường có mối quan hệ với nhau, việc tổ chức liệu theo cấu trúc thích hợp (cấu trúc liệu) giúp cho việc thực phép xử lý trên^ữ liệu đạt hiệu cao Mỗi quan hệ cấu trúc liệu giải thuật: Giải thuật tác động cấu trúc liệu để đưa kết mong muốn Giữa giải thuật cấu trúc liệu có mối quan hệ mật thiết với nhau, cấu trúc liệu thay đổi giải thuật thay đổi theo Ví du: Minh hoạ cấu trúc dừ liệu thay đổi, giải thuật thay đổi theo Bải toán: Input: - Một danh sách gồm cặp (tên đon vị, số điện thoại): (âl, bi), (3.2, ồ2), (íìn> bn); - Tên đom vị cần tỉm số điện thoại Output: - In số điện thoại ứng với tên đom vị nhập vào Phép xử lý tốn “tìm kiếm” Cụ thể: Nêu danh sách chưa theo tên đơn vị: Duyệt tên danh sách ai, a2 , a3 , ãn lúc tìm thấy đom vị a¡ chi định, đổi chiếu số điện thoại tương ứng Neu trước danh mục điện thoại theo thứ tự từ điển đổi với tên đơn vị: áp dụng giải thuật tìm kiếm khác tốt làm tra từ điển Nếu lại tổ chức thêm bảng danh mục chi dẫn theo chữ “tên đom vị” Việc tìm kiếm số điện thoại “Đại học Bách khoa” bỏ qua tên đơn vị mà chữ đầu Đ Một cấu trúc liệu có tương ứng giải thuật, nghiên cứu cấu trúc liệu ta đồng thời phải xác lập giải thuật xử lý cấu trúc 1.2 Cấu trúc liệu vấn đề liên quan 1.2.1 Lựa chọn cẩu trúc liệu Trong toán: Dữ liệu = {Các phần tử sở} // liệu nguyên tử (atom): ký tự, chữ số Trên sở liệu nguyên từ, cung cách khả dĩ, liên kết chúng lại với ta cấu trúc liệu khác Lựa chọn cấu trúc liệu thích hợp để tổ chức dừ liệu vào, sở xây dựng giải thuật xừ lý hữu hiệu đưa tới kết mong muốn khâu quan trọng Khi ứng dụng máy tính điện từ chi có phạm vi tốn khoa học kỹ thuật ta chi gặp cấu trúc liệu đcm giản biến, vector, ma trận Khi ứng dụng mở rộng sang lĩnh vực khác, ta thường gọi toán phi số (non numberial problems), cấu trúc liệu khơng cịn đủ đặc trưng cho mối quan hệ liệu nữa, địi hỏi phải có cấu trúc liệu mới, phù hợp Việc sâu vào cấu trúc liệu quan tâm cùa giáo trình 1.2.2 Phép tốn cẩu trúc liệu Đối với toán phi số, cấu trúc liệu thường kèm với phép toán tác động cấu trúc Ví du: + Phép tạo lập hay huỷ bỏ cấu trúc; + Phép truy cập vào phần tử cấu trúc; + Phép bổ sung hay loại bỏ phần tử cấu trúc Các phép tốn có tác động khác cấu trúc Chọn cấu trúc liệu, ta phải nghĩ tới phép toán tác động chúng 1.2.3 Cẩu trúc lưu trữ Biểu diễn cấu trúc liệu cách cài đặt cấu trúc máy tính Trên sở cấu trúc lưu trữ để thực phép xử lý có nhiều cấu trúc lưu trữ khác cho cấu trúc liệu cấu trúc liệu biểu diễn nhớ bời nhiều cấu trúc lưu trữ Cấu trúc liệu tương ứng với nhớ trong: lưu trữ Cấu trúc liệu tương ứng với nhớ ngoài: lưu trữ 1.2.4 Cẩu trúc liệu tiền định Mọi ngơn ngữ lập trình có cấu trúc liệu tiền định Nhưng khơng phải tất cấu trúc tiền định sử dụng, đáp ứng yêu cầu cần thiết cấu trúc, người thiết kế giải thuật phải biết linh hoạt vận dụng ngôn ngữ để mô cấu trúc liệu chọn cho tốn cần giải Ví du: Nếu xử lý hồ sơ cán mà dùng ngôn ngữ Pascal, ta tổ chức hồ sơ dạng bàn ghi (record - bao gồm nhiều thành phần (trường), không thiết phải kiểu) Nếu dùng ngôn ngữ Fortran gặp khó khăn (ta mơ mục hồ sơ dạng vector hay ma trận, việc xử lý phức tạp 13 Ngôn ngữ diễn đạt giải thuật Ngôn ngữ sử dụng phải có đủ khả diễn đạt giải thuật cấu trúc đề cập: có độ linh hoạt định, khơng q gị bó câu nệ cú pháp, gần gũi với chuẩn, cần dễ dàng chuyển đổi Trong giáo trình sử dụng ngơn ngữ tựa Pascal Ngôn ngữ lưu đồ hay sơ đồ khối công cụ trực quan để diễn đạt thuật toán Biểu diễn bàng lưu đồ giúp ta có nhìn tổng quan tồn cảnh q trình xử lý theo thuật tốn Lưu đồ hệ thống nút có hình dạng khác nhau, thể chức khác nối với cung Lưu đồ tạo thành bốn thành phần chủ yếu sau đây: 1) Nút giới hạn: biểu diễn hinh ôvan có ghi chữ bên Các nút cịn gọi nút đầu nút cuối lưu đồ 2) Nút thao tác: hình chữ nhật có ghi lệnh cần thực Ví dụ: tẩng k 3) Nút điều kiện: thường hình thoi có ghi điều kiện cần kiểm tra Trong cung nối với nút có hai cung chi hướng theo hai trường hợp: điều kiện điều kiện sai Ví dụ: 4/ Cung: đường nối từ nút đến nút khác lưu đồ Hoạt động thuật toán theo lưu đồ nút Sau thực thao tác kiểm tra điều kiện nút xử lý theo cung để đến nút khác Quá trinh thực thuật toán dừng gặp nút kết thúc hay nút cuối Trong giáo trình chủ yếu sử dụng ngôn ngữ tự nhiên mã giả để trình bày thuật tốn Trong cách sử dụng ngôn ngữ tự nhiên ta liệt kê bước thực thao tác hay công việc thuật tốn bàng ngơn ngữ mà người sừ dụng cách phổ thông hàng ngày Các thuật tốn trình bày hai ví dụ cách biểu diễn thuật tốn dùng ngơn ngữ tự nhiên Mặc dù cách biểu diễn tự nhiên khơng địi hỏi người viết thuật tốn phải biết nhiều quy ước khác, khơng thể rõ tính cấu trúc thuật tốn nên khơng thuận lợi cho việc thiết kế cài đặt thuật toán phức tạp Hom nhiều trường hợp việc biểu diễn thuật tốn ngơn ngữ tự nhiên tò dài dòng dễ gây nhầm lẫn người đọc Còn việc sử dụng lưu đồ cồng kềnh thuật toán phức tạp Mã giả: Để biểu diễn thuật toán cách hiệu quả, người ta thường dùng mã giả (pseudocode) Theo cách này, ta sử dụng số quy ước ngôn ngừ lập trinh, chẳng hạn ngơn ngữ lập trình Pascal, cấu trúc điều khiển ngơn ngữ lập trình cấu trúc chọn, cấu trúc lặp Trong mã giả ta cịn sử dụng ký hiệu tốn học, biến, cấu trúc kiểu thủ tục cấu trúc thuật toán kiểu thủ tục thường sử dụng để trình bày thuật tốn đệ qui hay thuật tốn q phức tạp cần phải trình bày thành nhiều cấp độ Cùng với việc sử dụng biến, thuật toán thường gặp phát biểu hành động đặt (hay gán) giá trị cho biến Ví dụ:? hành động tăng biến i lên viết sau: i: = i + hay i?i+ Các cấu trúc thường sử dụng mã giả dựa theo ngôn ngữ lập trinh Pascal gồm: 1) Cấu trúc chọn: * if (điều kiện) then (hành động) * if (điều kiện) then (hành động) else (hành động) begin W r i t e ("Cạn"); R e t u r n (0); End; {Loại bỏ} Y:=Q[F] ; {Xử loại lý truờng họp queue trở thành rỗng s au phép bỏ} if F =R th e n {q u e u e chi c ó m ộ t p h ầ n tử F=R) Begin F:=R:=0; R e t u r n (Y); End; {Chinh lạ i if F = n t h e n else trò F sau p h é p l o i bò) F:= l F:=F+1 return (Y ) ; 51 Chương - DANH SÁCH MÓC NÓI Lưu trữ danh sách tuyến tính bộc lộ nhiều nhược điểm thực thường xuyên phép bô sung loại bỏ phân từ Giải pháp khắc phục sử dụng ừỏ mối nối để tổ chức danh sách tuyến tính 5.1 Danh sách đơn 5.1.1 Nguyên tắc Mỗi phần tử danh sách lưu trữ phần từ nhớ gọi nút: Mỗi nút bao gồm số từ máy nhau; Các nút nằm vị trí nhớ; Mỗi nút chứa thông tin ứng với phần tử địa chi phần tử đứng sau danh sách: INFO ị Chứa thông tin 52 LINK Chứa địa chi móc nối Nút cuối cùng: Khơng có nút đứng sau, LINK chứa “địa chi đặc biệt” dùng để đánh dấu nút kết thúc danh sách, ta gọi mối nối không, ký hiệu NULL Muốn truy nhập vào danh sách ta phải truy nhập vào phần từ đầu tiên, nghĩa sử dụng trỏ n trở tới nút Hình ảnh danh sách nối đơn: » A ĩ R c D : Chỉ mối nối không Qưy ước: Danh sách rồng: L=NƯLL Đe tổ chức danh sách móc nối, khả sau phải có: + Tồn phương tiện để chia nhớ thành nút, nút truy nhập vào trường (trường có kích thước ấn định); + Tồn chế xác định nút sử dụng (nút bận), không sử dụng (nút trống); + Tồn chế kho chứa chỗ trống, để cung cấp nút trống (list available space) Đẻ tiện trình bày ta gọi co cấu “danh sách chỗ trống”, qui ước: XAVAIL: Thu hồi nút có địa X trả danh sách chồ trống Ban đầu thân danh sách ch ỗ trống m ột stack đom, A V A IL trỏ, trò tới nút đầu danh sách, sau cấp phát thu hồi ô nhớ => nút danh sách khơng cịn 53 5.1.2 Một số phép toán Xét số giải thuật thể số phép toán thường tác động vào danh sách nối đơn - Với nút có địa p (được trỏ bời P) thì: + INFO(P): Chi trường INFO - chứa thông tin nút P; + LINK(P): Chỉ trường địa nút nút p 1.Bổ sung phần tử vào danh sách nối đơn Procedure co n trò, {L: M: M, X) t r ò t ới n út đ ầ u t i ê n c ủ a d a n h sách C o n t r ỏ t r ỏ t i m ộ t n út đ a n g có t r o n g d a n h Giải thuật: truờng 1) I N S E R T (L, Bổ sung INFO có giá vào trị s a u n út t r ò bời sách M nút có X} {Tạo n út mói } N e w b ổ else bổ sung sung Minh hoạ hình ảnh sau: a) Nếu L=null sau phép bổ sung ta có: New b) Nếu nút L^null V R A yÌA ►c t - - ►n X ►F — Loại bỏ phần tử khỏi danh sách nối đơn Procedure D E L E T E (L,M) {cho danh sách thực loại nối bỏ đon nú t trò trỏ bởi M L Giải thuật khỏ i danh sách đó} 1) (truờng họp danh if L = n u l l sách rỗng) then Begin W r i t e ("danh s c h rỗ ng ") ; R e t u rn ; End; 2) {Truông danh if M = L hợp nú t trỏ M nút sách} then Begin 55 L:=LINK(M); M=>AVAIL; Return; End; 3) {Tìm đ ế n n út đ ứ n g t r u c nút tr ỏ b i M} P:=L; While L I N K (P)* M p := L I N K (P ) ; 4) {Loại b ỏ M) L I N K ( P ) := L I N K ( M ) ; 5) {Đưa nút b ị loại d a n h s c h c h ỗ t r ố n g } M:=AVAIL; 6) return - ► R A ► c ► D ấi X Ghép hai danh sách nối đơn Procedure { Ghép i thành 1) COMBINE(P, danh danh nối đo n sá c h m i c ho lần t h e n re t u r n {p Rỗng} if p = n u l l th e n Begin P:=Q; Return; En d 3) 56 {Tìm đ ế n nút cuối d a n h sách lu ợ t p trò tới { T r u ô n g h ợ p Q rỗng} if Q = n u l l 2) sá c h Q) P} trỏ nó} bời p, Q Pi:=P; While 4) L I N K (Pi)* n u l l d o P ^ L I N K (Pi) {Ghép} L I N K (P]) :=Q; 5) return *Chúý: Cách tổ chức móc nối rõ ràng tỏ thích hợp, nhiên cách cài đặt có nhược điểm định, như: + Chi có phần tử truy cập trực tiếp, phần tử khác chi truy nhập sau truy nhập phần tử trước nó; + Tổn nhớ có thêm trường LINK nút để lưu trữ điạ chi 5.2 Danh sách nối vòng Là cải tiến danh sách nối đơn Trường LINK nút cuối danh sách nối đơn chứa địa chi nút danh sách Hình ảnh sau: * ưu điêm : Giúp cho việc truy nhập vào nút linh hoạt (vì nút coi nút trỏ L trỏ tới nút được) Phép ghép, tách có thuận lợi định * Nhược đ iêm : Trong xử lý, không cẩn thận dẫn đến chu trình khơng kết thúc (vì khơng biết chồ kết thúc danh sách) 57 * Khắc phục: Đưa thêm nút đặc biệt trỏ tới phần tò danh sách trỏ HEAD trỏ tới nút đầu danh sách này, nút có trường INFO khơng chứa liệu phần từ Việc thêm nút đầu danh sách khiến danh sách khơng rỗng, ta có hình ảnh i/ tH P l LINK(HEAD)=HEAD * Giải thuật bổ sung nút vào thành nút danh sách nối vòng NEW biểu diễn: c* -2 10 6 5.4.2 Giải thuật Đe cộng A(x), B(x) phải dùng hai biến trỏ p, Q để duyệt qua hai danh sách A(x), B(x) q trình có tình sau: + EXP(P)=EXP(Q): cộng giá trị COEF hai nút đó, tổng khác tạo nút lưu giá trị tổng đó, gắn vào C(x); + EXP(P)>EXP(Q) (hoặc ngược lại tương tự); + Nếu danh sách kết thúc trước: phần lại danh sách chép gắn dần vào danh sách C(x) Đ iều thể bàng thủ tục A T T A C H 62 Procedure ATTACH(H,M,d) {C O E F chứa s a u nú t gi trị trò H, EXP chúa M, gắn nú t vào d} New

Ngày đăng: 17/06/2023, 09:46

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

TÀI LIỆU LIÊN QUAN

w