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

Báo cáo nghiên cứu khoa học: Cấu trúc dữ liệu stack và ứng dụng của stack trong các giải thuật đệ qui

33 44 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

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 456,25 KB

Nội dung

Đề tài nghiên cứu khoa học Cấu trúc dữ liệu stack và ứng dụng của stack trong các giải thuật đệ qui với mục đích để làm rõ tác dụng vai trò của stack trong việc hoạt động của một số giải thuật đệ qui và hướng phát triển là tìm hiểu lí thuyết để mô phỏng hoạt động của stack và ứng dụng của stack trong các giải thuật đệ qui. Mời các bạn cùng tham khảo.

Trƣờng đại học sƣ phạm Hà Nội Khoa công nghệ thông tin &&& BÁO CÁO NGHIÊN CỨU KHOA HỌC Đề tài: CẤU TRÚC DỮ LIỆU STACK VÀ ỨNG DỤNG CỦA STACK TRONG CÁC GIẢI THUẬT ĐỆ QUI Giảng viên hướng dẫn: Thầy Nguyễn Hữu Dung Sinh viên thực hiện: Nguyễn Thị Kim Oanh Lớp: ak54 Hà Nội, ngày 15 tháng năm 2008 Cấu trúc liệu Stack ứng dụng stack giải thuật đệ qui PHẦN 1: MỞ ĐẦU I LÍ DO CHỌN ĐỀ TÀI Các kiểu cấu trúc liệu stack, queue… với giải thuật đệ qui chiếm vị trí quan trọng khoa học máy tính Ngày nay, với phát triển vũ bão cơng nghệ thơng tin, thuật tốn đời để giúp người giải tốn mới, phức tạp Nhưng vai trị kiểu cấu trúc liệu stack khơng bị giảm bớt, kiểu liệu để áp dụng vào giải toán phức tạp Cũng stack, đệ qui có tuổi thọ cao lĩnh vực khoa học máy tính vị trí, vai trị quan trọng Nhờ có đệ qui mà số toán phức tạp giải cách dễ dàng Chính mà chương trình học mơn cấu trúc liệu giải thuật trường cao đẳng, đại học hay trường chuyên, kiểu cấu trúc liệu stack đệ qui chiếm vị trí quan trọng, việc học chúng có ý nghĩa làm tảng cho việc học thuật toán khác viết code để cài đặt chương trình máy tính Và học sinh, sinh viên tiếp thu kiến thức cách hiệu quả, tránh rơi vào tình trạng mơ hồ, trừu tượng (hiện tượng hay thường gặp học sinh, sinh viên lần đầu tiếp thu kiến thức) hướng phát triển lên đề tài mô việc hoạt động stack, ứng dụng stack hoạt động giải thuật đệ qui Tuy việc nghiên cứu học tập stack đệ qui đề tài khơng cịn mẻ, chí có nhiều cá nhân cho lỗi thời Nhưng stack đệ qui mảng kiến thức thiếu khoa học máy tính Chính vậy, việc học tập nghiên cứu chúng cần thiết mô hoạt động stack đệ qui làm cho cơng việc trở nên hiệu giảm chi phí thời gian cho người học người dạy II MỤC TIÊU NHIỆM VỤ  Nghiên cứu để làm rõ tác dụng vai trò stack việc hoạt động số giải thuật đệ qui  Hướng phát triển tìm hiểu lí thuyết để mơ hoạt động stack ứng dụng stack giải thuật đệ qui III ĐỐI TƢỢNG NGHIÊN CỨU  Lí thuyết cấu trúc liệu trừu tượng Stack  Hoạt động Stack việc áp dụng stack số toán  Đệ qui số giải thuật đệ qui  Việc ứng dụng stack vào hoạt động số giải thuật đệ qui  Ngôn ngữ lập trình hướng đối tượng Visual Foxpro dùng để phục vụ cho hướng phát triển cài đặt mô IV PHƢƠNG PHÁP NGHIÊN CỨU Nghiên cứu, học tập chủ yếu thơng qua giáo trình mơn cấu trúc liệu giải thuât, tài liệu, giảng giảng viên, sách tham khảo, tài liệu download từ mạng V CẤU TRÚC KHỐ LUẬN Khố luận gồm phần: Phần 1- Mở đầu: phần nêu lí chọn đề tài, mục đích nghiên cứu đề tài, đối tượng nghiên cứu phương pháp nghiên cứu đề tài Phần 2- Nội dung: phần trọng tâm đề tài, phần gồm có:  Lí thuyết cấu trúc liệu stack  Lí thuyết đệ qui  Ứng dụng stack vào hoạt động giải thuật đệ qui PHẦN 2: NỘI DUNG A LÍ THUYẾT I LÍ THUYẾT VỀ CẤU TRÚC DỮ LIỆU STACK ĐỊNH NGHĨA NGĂN XẾP: Stack kiểu danh sách tuyến tính đặc biệt mà phép bổ sung phép loại bỏ luôn thực đầu gọi đỉnh Hay ta cịn định nghĩa khác là: ngăn xếp (stack) cấu trúc liệu trừu tượng làm việc theo nguyên lý vào sau trước (last in first out) Một ngăn xếp cấu trúc liệu dạng thùng chứa (container) phần tử (thường gọi nút (node)) có hai phép toán : push and pop  Push bổ sung phần tử vào đỉnh (top) ngăn xếp,nghiã sau phần tử có ngăn xếp  Pop giải phóng trả phần tử đứng đỉnh ngăn xếp Trong stack, đối tượng thêm vào stack lúc có đối tượng thêm vào sau phép lấy khỏi stack Ngoài ra, stack hỗ trợ số thao tác khác:  isEmpty(): Kiểm tra xem stack có rỗng khơng  Top(): Trả giá trị phần tử nằm đầu stack mà khơng hủy khỏi stack Nếu stack rỗng lỗi xảy MƠ TẢ STACK 2.1 Mô tả Stack mảng Khi mô tả Stack mảng:  Việc bổ sung phần tử vào Stack tương đương với việc thêm phần tử vào cuối mảng  Việc loại bỏ phần tử khỏi Stack tương đương với việc loại bỏ phần tử cuối mảng  Stack bị tràn bổ sung vào mảng đầy  Stack rỗng số phần tử thực chứa mảng = Program stack_by_array; const max = 10000; var stack: array[1 max] of integer; last: integer; procedure stack_init; begin last:= 0; end; procedure push(v: integer); begin if last = max then writeln(‘stack is full’) else begin inc(last); stack[last]:= v; end; end; function pop: integer; begin if last = then writeln(‘stack is empty’) else begin pop:= stack[last]; Dec(last); end; end; BEGIN Stack_init; ; END 2.2 Mô tả danh sách nối đơn kiểu LIFO Khi cài đặt Stack danh sách nối đơn kiểu LIFO, stack bị tràn vùng khơng gian nhớ dùng cho biến động khơng cịn đủ để thêm phần tử Tuy nhiên, việc kiểm tra điều khó phụ thuộc vào máy tính ngơn ngữ lập trình Ví dụ Turbo Pascal, Heap trống 80 bytes đủ chỗ cho 10 biến, biến bytes mà Mặt khác, không gian nhớ dùng cho biến động thường lớn nên cài đặt ta bỏ qua việc kiểm tra stack tràn Program stack_by_linklist; Type Pnode = ^Tnode; Tnode = record Value: integer; Link: Pnode; end; var last: Pnode; Procedure stack_init; Begin Last:= nill; End; Procedure push( v: integer); Var p: Pnode; Begin New(p); p^.link:= last; last:= p; end; function pop: integer; var p: Pnode; begin if last = nil then writeln(‘stack is empty’) else begin pop:= last^.value; p:= last^.link; dispose(last); last:= p; end; end; BEGIN Stack_init; ; END II LÝ THUYẾT VỀ ĐỆ QUI 1.KHÁI NIỆM VỀ ĐỆ QUI Ta nói đối tượng đệ qui định nghĩa qua đối tượng khác dạng với quy nạp Ví dụ: Qua gương cầu đối diện Trong gương thứ chứa hình gương thứ Chiếc gương thứ lại chứa hình gương thứ nên tất nhiên chứa lại hình ảnh gương thứ Ở góc nhìn hợp lí, ta thấy dãy ảnh vơ hạn gương Một ví dụ khác người ta phát hình trực tiếp phát viên ngồi bên máy vơ tuyến truyền hình, hình máy lại có hình ảnh phát viên ngồi bên máy vơ tuyến truyền hình thế… Trong tốn học, ta hay gặp định nghĩa đệ qui: Giai thừa n (n!): Nếu n= n! = 1; n>0 n!= n.(n-1)! Tam giác Sierpinski GIẢI THUẬT ĐỆ QUI Nếu lời giải bìa tốn P thực lời giải toán P‟ có dạng giống P lời giải đệ qui Giải thuật tương ứng với lời giải gọi giải thuật đệ qui Mới nghe lạ điểm mấu chốt cần lưu ý là: P‟ có dạng giống P, theo nghĩa đó, phải “nhỏ hơn” P, dễ giải P việc giải không cần dùng đến P Trong Pascal, ta thấy nhiều ví dụ hàm thủ tục có chứa lời gọi đệ qui tới nó, bây giờ, ta tóm tắt lại phép đệ qui trực tiếp tương hỗ viết Định nghĩa hàm đệ qui hay thủ tục đệ qui gồm phần:  Phần neo (anchor): phần thực mà cơng việc q đơn giản, giải trực tiếp không cần phải nhờ đến toán  Phần đệ qui: Trong trường hợp toán chưa thể giải phần neo, ta xác định toán gọi đệ qui giả tốn Khia có lời giải tốn rịi phối hợp chúng lại để giải toán quan tâm Phần đệ qui thể tính qui nạp lời giải Phần neo quan trọng định tới tính hữu hạn dùng lời giải VÍ DỤ VỀ GIẢI THUẬT ĐỆ QUI 3.1 Hàm tính giai thừa Function Factorial (n: integer): integer; Begin if n= then Factorial:= else Factorial:= n* Factorial(n-1); End; Ở đây, phần neo định nghĩa kết hàm n= 0, phần đệ qui (ứng với n>0) định nghĩa kết hàm qua giá trị n giai thừa n-1 Ví dụ: dùng hàm để tính 3!, trước hết phải tính 2! 3! tính tích 3*2! Tương tự, để tính 2!, lại phải tính 1! 2! tính 2*1! Áp dụng bước qui nạp thêm lần 1!= 1*0!, ta đạt tới trường hợp phần neo, đến từ giá trị 0!, tính 1! = 1*1; từ giá trị 1! tính 2!; sau tính 3!; cuối cho kết 3!= 3*2!  3*2*1!  3*2*1*0! 3*2*1*1 = 3.2 Dãy số Fibonaci Dãy số Fibonaci bắt nguồn từ toán cổ việc sinh sản cặp thỏ Bài toán đặt sau: Các thỏ không chết Hai tháng sau đời, cặp thỏ sinh cặp thỏ (một đực, cái) stack nạp để bảo lưu giá trị cần thiết Cịn khỏi mức phần tử đỉnh stack “móc” để khôi phục lại giá trị cần thiết cho mức Ta tóm tắt bước sau: MỞ ĐẦU Bảo lưu tham số, biến cục địa quay lui THÂN Nếu tiêu chuẩn sở (base criterion) ứng với trường hợp suy biến đạt thực phần tính kết thúc (final computation) chuyển sang bước 3 KẾT THÚC Khôi phục lại tham số, biến cục địa quay lui chuyển tới địa quay lui BÀI TỐN TÍNH GIAI THỪA Sau chương trình thể cài đặt thủ tục đệ qui, dùng stack cho tốn tính n! “tháp Hà Nội” Program factorial {Cho số nguyên n, giải thuật thực tính n! Ở sử dụng stack A mà đỉnh trỏ T Mỗi phần tử A ghi gồm có hai trường: TrườngN ghi giá trị động n mức hành Trường RETADD ghi địa quay lui Lúc đầu stack A rỗng: T = Một ghi TEMREC dùng làm ghi trung chuyển, có trường: PARA ứng với N ADDRESS ứng với RETADD Ở đặt giả thuyết: lúc đầu TEMREC chứa giá trị cần thiết, nghĩa PARA chứa giá trị n cho, ADDRESS chứa địa ứng với lời gọi chương trình mà ta gọi ĐCC(viết tắt địa chính) Các giải thuật PUSH POS sử dụng Trong giải thuật ta viết N(T) điều có nghĩa giá trị trường N phần tử trỏ tới T (phần tử đỉnh stack A)} 1.{Bảo lưu giá trị N địa quay lui} call PUSH(A,T, TEMREC) 2.{Tiêu chuẩn sở đạt chưa?} if N(T) =0 then begin factorial:=1; goto bước 4; end else begin PARA := N(T) – ADDRESS:= bước end; goto bước 3.{tính N!} factorial:= N(T)* factorial; 4.{Khơi phục giá trị trước N địa quay lui} call POP(A, T, TEMREC); goto ADDRESS end Sau hình ảnh minh hoạ tình trạng stack A trình thực giải thuật, ứng với n =3 Số mức Các bước thực Vào mức 1(lời gọi chính) Bước PUSH(A,O,(3,ĐCC)) bước 2: N 0 PARA:= 2; ADDRESS:= bước Vào mức bước 1: (gọi đệ qui lần 1) PUSH(A,1,(2,bước 3)) bước 2: N0 PARA:=1; ADDRESS:= bước Vào mức bước 1: (gọi đệ qui lần 2) PUSH(A,2,(1, bước 3)) bước 2: N0; PARA:=0; ADDRESS:= bước 3; Vào mức bước 1: (gọi đệ qui lần 3) PUSH(A,3,(0,bước 3)) bước 2: N= 0; Factorial:=1; bước 4: POP(A, 4, TEMREC); goto bước 3; Quay lại mức bước 3: factorial:=1*1 bước 4: POP(A, 3, TEMREC); Goto bước 3; Quay lại mức bước 3: factorial:= 2*1 POP(A, 2, TEMREC); goto bước Quay lại mức bước 3: factorial:= 3*2 bước 4: POP(A,1, TEMREC); goto ĐCC 2.BÀI TOÁN THÁP HÀ NỘI N: số lượng đĩa SN: cọc xuất phát IN: cọc trung chuyển DN: cọc đích Giải thuật thực chuyển chồng N đĩa từ cọ SN sang coc DN Ở sử dụng stack ST phần tử ghi gồm có trường tương ứng với N, SN, IN, DN RETADD để chứa giá trị N, SN, IN, DN địa quay lui Một ghi TEMREC có trường tương ứng với trường nêu trên, gọi NVAL, SNVAL, DNVAL ADDRESS TEMREC dùng làm ghi trung chuyển Thoạt đầu ghi nhận giá trị ban đầu N, SN, IN, DN RETADD Stack ST có đỉnh trỏ T, lúc đầu stack rỗng T=0 1{Bảo lưu tham số địa quay lui} call PUSH(ST, T, TEMREC) 2.{Kiểm tra giá trị dừng N, chưa đạt chuyển N- đĩa từ cọc xuất phát sang cọc trung chuyển} If N(T)= then goto RETADD(T) else begin NVAL:= N(T)- 1; SNVAL:=SN(T); INVAL:=DN(T); DNVAL:=IN(T); ADDRESS:= bước 3; goto bước 1; 3.{Chuyển đĩa thứ N từ cọc xuất phát sang cọc đich N-1 đĩa từ cọc trung chuyển sang cọc đích} call POS(ST,T, TEMREC); write(„dia‟, N, „tu coc‟, „SN‟, „den coc‟, „DN‟) NVAL:= N(T)-1; SNVAL:= IN(T); INVAL:= SN(T); DNVAL:=DN(T); ADDRESS:= bước 4; goto bước 1; {Quay lại mức trước} call POP(ST,T, TEMREC); goto RETADD(T) end TÌM KIẾM QUICK SORT 3.1 Giới thiệu phƣơng pháp Sắp xếp kiểu phân đoạn (quick sort) cải tiến phương pháp xếp kiểu đổi chỗ Đây phương pháp tơt, người sáng lập C.A.R.Hoare, mạnh dạn đặt tên cho xếp NHANH Procedure Quick-sort(K, LB, UB); If LB< UB then Begin Call PART(K, LB, UB,j); Call Quick-sort(K, LB,j-1); Call Quick-sort(K,j+1, UB); End; Return; Procedure PART(K, LB, UB, j); 1.i:= LB +1; j:= UB; 2.while i K[LB] j:= j- 1; if i

Ngày đăng: 27/04/2021, 13:13

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w