mô phỏng thuật toán heap sort & quick sort trên maple

25 1.2K 0
mô phỏng thuật toán heap sort & quick sort trên maple

Đ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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT Tiểu luận : MÔ PHỎNG THUẬT TOÁN HEAP SORT & QUICK SORT TRÊN MAPLE Giảng viên hướng dẫn : PGS.TS Đỗ Văn Nhơn Học viên thực hiện : Đoàn Vũ Ngọc Duy MSSV : CH1101010 TP.HCM 01/01/2013 GIỚI THIỆU 3 ĐẶC ĐIỂM 4 NHỮNG ỨNG DỤNG CHỦ YẾU 4 CẤU TRÚC GIAO DIỆN VÀ TÀI NGUYÊN CỦA MAPLE 5 1. LÀM QUEN VỚI MAPLE 5 SỬ DỤNG DỊCH VỤ TRỢ GIÚP (HELP) TRONG MAPLE 6 LƯU TRỮ VÀ TRÍCH XUẤT DỮ LIỆU 7 MÔI TRƯỜNG TÍNH TOÁN VÀ CÁC ĐỐI TƯỢNG LÀM VIỆC 7 BÀI TẬP VẬN DỤNG 15 1. THUẬT TOÁN HEAP SORT 15 THUẬT TOÁN QUICK SORT 20 2 GIỚI THIỆU Lập trình symbolic là lập trình trên cơ sở toán học logic, được thiết kế để giải quyết các vấn đề liên quan đến trí tuệ nhân tạo. Chương trình là tập hợp các mô tả logic , lập trình dạng này còn được gọi là ngôn ngữ lập trình ký hiệu (symbolic programming) tương tự các ngôn ngữ lập trình hàm (functional programming), hay lập trình phi số (non-numerical programming). Lập trình symbolic rất thích hợp để giải quyết các bài toán liên quan đến các đối tượng (object) và mối quan hệ (relation) giữa chúng Với các tính năng cơ bản của mình, Maple có thể thực hiện được hầu hết các phép toán cơ bản trong chương trình toán đại học và phổ thông. Maple là chương trình tính toán vạn năng rất đồ sộ, không thể nào nắm bắt cho hết (dù chỉ trên phương diện tính toán và biểu diễn) ở đây em xin trình bày các bước cơ bản về số học và các vấn đề liên quan, giới thiệu các câu lệnh, các hàm thường sử dụng, cách viết các thủ tục. Từ đó có thể xây dựng nhiều chương trình khác phục vụ cho việc học tập và nghiên cứu. Maple là sản phẩm của Waterloo Maple Inc. (http://www.maplesoft.com). Ra đời vào những năm 1980 tại đại học Waterloo (Canada), và cho đến thời điểm hiện nay (những ngày đầu năm 2008) đã phát triển đến phiên bản 11. Cài đặt đơn giản, không đòi hỏi cấu hình máy mạnh (như Matlab), chạy trên tất cả các hệ điều hành, không quá khó khăn để tự học cách sử dụng với một trình trợ giúp (Help) rất tiện lợi. Maple là một chương trình tính toán mạnh mẽ. Hãy thử làm một phép so sánh nhỏ với một công cụ tính toán thật quen thuộc với chúng ta: Chiếc máy tính bỏ túi (một phép so sánh rất khập khiễng). Máy tính bỏ túi thì chỉ có thể tính toán với số cụ thể (nếu bạn nghĩ nó có thể phân tích đa thức thành nhân tử chẳng 3 hạn ?) nhưng Maple thì khác. Nó có khả năng làm việc với cả những biểu thức toán học và các phép tính hình thức. Cho phép tính toán ra các giá trị chính xác (chứ không phải là gần đúng như một số ngôn ngữ lập trình khác – ví dụ : C# hay C++ không hổ trợ tính chính xác tuyệt đối) Từ rút gọn, khai triển biểu thức, tính giới hạn, đạo hàm, nguyên hàm (chứ không phải chỉ là tính tích phân) ở bậc phổ thông. Đến khai triển Taylor, tìm nghiệm phương trình vi phân, tính định thức, giải hệ phương trình tuyến tính có tham số… Maple xử lý trong tích tắc. Không chỉ như vậy, Maple còn có thể minh hoạ xuất sắc đồ thị hai chiều lẫn mặt cong trong không gian ba chiều, đồ thị toạ độ cực, tham số, hàm ẩn. Đặc điểm • Là một hệ thống tính toán trên các ký hiệu và biểu thức toán học. • Có thể thực hiện hầu hết các phép toán cơ bản của chương trình toán đại học và sau đại học.Tính toán được nghiệm chính xác và gần đúng của một lớp rộng các bài toán lý thuyết và ứng dụng. • Cung cấp các công cụ minh họa hình học thuận tiện bao gồm: đồ thị, hình vẽ tĩnh và động của các đường và mặt được cho bởi các hàm tùy ý trong nhiều hệ tọa độ khác nhau. • Một ngôn ngữ lập trình đơn giản và mạnh mẽ có khả năng chuyển đổi sang các ngôn ngữ lập trình khác. • Cho phép trích xuất dữ liệu ra các định dạng khác nhau như Latex, Word, HTML • Một công cụ biên soạn giáo trình điện tử và trình diễn bài giảng thuận tiện. • Hỗ trợ theo nhiều mức độ cho sinh viên trong việc học tập. Những ứng dụng chủ yếu • Maple như một công cụ hỗ trợ việc dạy và học toán. Ứng dụng này quả thật là quan trọng với những sinh viên sư phạm toán cũng như những 4 người làm công tác nghiên cứu toán học • Ngoài ta Maple còn là một công cụ hỗ trợ cho tin học và lập trình. Hiện nay khi Pascal thiếu nhiều công cụ và không còn phù hợp lắm với kiến thức tin học hiện nay để dạy và học cách lập trình. Với những phần mềm tính toán khoa học đang được phát triển rất mạnh mẽ hiện nay như Maple, Mathematica, Matlab… Ta có thể khai thác ngôn ngữ lập trình của nó để học tin học, nhất là thể hiện các thuật toán và các kiến thức tin học có liên quan. Với việc thể hiện các thuật toán trên các ngôn ngữ thông thường như C#, C++ hay Java cũng có nhiều hạn chế trong lập trình cũng như tính toán chính xác, maple là một công vụ rất mạnh để mô phỏng các thuật toán trong trí tuệ nhân tạo hay các thuật giải mã hóa dữ liệu cho đến việc mô phỏng máy học…. CẤU TRÚC GIAO DIỆN VÀ TÀI NGUYÊN CỦA MAPLE Việc cài đặt và khởi động chương trình Maple trên môi trường Windows không có gì khác biệt so với các chương trình ứng dụng khác. Giao diện của Maple khá giống với giao diện làm việc của các chương trình ứng dụng khác trên Windows và cũng rất “ thân thiện” với người sử dụng. Khi khởi động Maple, chương trình chỉ tự động kích hoạt nhân của Maple bao gồm các phép toán và chức năng cơ bản nhất. Phần nhân chiếm khoảng 10% dung lượng của toàn chương trình. Các dữ liệu và chương trình còn lại của Maple được lưu giữ trong thư viện Maple và được chia ra 2 nhóm: nhóm các lệnh cơ bản và nhóm các gói lệnh 1. Làm quen với maple Lệnh được gõ vào trang làm việc (worksheet) tại dấu nhắc lệnh ">" và theo ngầm định được hiển thị bằng font Courier màu đỏ. Một lệnh đựợc kết thúc bởi dấu " :" 5 hoặc dấu ";" và được ra lệnh thực hiện bằng việc nhấn Enter khi con trỏ đang ở trên dòng lệnh. > factor(2*x^102+x^100-2*x^3-x+60*x^2+30): Kết quả của lệnh được hiển thị ngay bên dưới dòng lệnh nếu dùng dấu " ;". Có thể dễ dàng dùng chuột và bàn phím để thực hiện các chức năng bôi đen, copy, paste, cut, delete đối với dữ liệu trên dòng lệnh hay kết quả thực hiện. • Trang làm việc (worksheet) : là trang chứa nơi có thể đặt các lệnh , các chương trình , các chú thích Trang làm việc sẽ được lưu lại thành file có phần mở rộng *.mws . • Cụm xử lí (Execution Group): [> là nơi có thể đặt 1 lệnh , hay một nhóm lệnh của Maple. Sau khi đánh Enter tòan bộ các lệnh trong cụm xử lí sẽ được thực thi. • Cụm văn bản (Text) : [ là nơi có thể đặt văn bản với mục đích minh họa, chú thích. • Phần (Section) : có thể thu gọn/nới rộng , có thể bao gồm cụm xử lí và cụm văn bản. • Trong một cụm xử lí có thể gồm nhiều lệnh. Các lệnh kết thúc bằng ; hoặc :  Các lệnh kết thúc bằng ; sẽ được thực thi và kết quả hiện ra màn hình.  Các lệnh kết thúc bằng : sẽ được thực thi ngầm và kết quả không hiện ra màn hình.  Muốn thêm một lệnh sau lệnh hiện tại gõ Shift Enter thay vì Enter. • Có thể click vào nút lệnh Help trên Menu Bar của Maple để mở phần tài liệu trợ giúp , tìm kiếm mục thích hợp , nhấn Ctrl + F1 để copy tòan bộ ví dụ , dán ngược lại vào trang để thực thi Sử dụng dịch vụ trợ giúp (Help) trong Maple Maple có dịch vụ trợ giúp khá đầy đủ và thuận lợi bao gồm cú pháp, giải thích cách dùng và các ví dụ đi kèm. Để nhận được trợ giúp, có thể: 6 • Nếu đã biết tên lệnh thì từ dấu nhắc gõ vào > factor • Nếu dùng một gói lệnh thì khi nạp gói lệnh, Maple sẽ hiển thị toàn bộ lệnh trong gói đó. • Một cách thông dụng nữa là dùng trình Help|Topic Search rồi gõ vào từ khóa cần tìm. Lưu trữ và trích xuất dữ liệu Trang làm việc của Maple sẽ được lưu giữ bằng file có đuôi ".mws". File được lưu giữ bằng trình File|Save. Một file đó được mở bằng File|Open. Ngoài việc lưu giữ bằng định dạng của Maple như trên, dữ liệu có thể được trích xuất thành các định dạng khác như LaTex hay HTML. Trích xuất bằng File| Export. MÔI TRƯỜNG TÍNH TOÁN VÀ CÁC ĐỐI TƯỢNG LÀM VIỆC Maple có 2 môi trường làm việc là toán và văn bản. Sau khi khởi động, Maple tự động bật môi trường toán. Muốn chuyển sang môi trường văn bản, kích chuột vào biểu tượng T trên thanh công cụ hay vào trình Insert->Text. Ngược lại, từ môi trường văn bản, kích chuột vào dấu "[>" trên thanh công cụ hay vào Insert để chuyển sang môi trường toán. Một trang làm việc (worksheet) của Maple có thể bao gồm những thành phần cơ bản như sau: • Cụm xử lý (Execution Group) • Lệnh và kết quả tính toán của Maple • Mục (Section) • Đồ thị (Graph) • Siêu liên kết (Hyperlink) • Văn bản và đoạn văn bản (Text và paragraph) Đầu tiên hãy mở một trang (worksheet) mới bằng cách chọn File/New. Một trang 7 trắng với dấu [> sẽ hiện ra: > Dấu trên gọi là prompt, sau dấu đó các bạn có thể gõ các phép tính và yêu cầu Maple thực hiện. Kết thúc mỗi dòng lệnh là dấu chấm phẩy hai hai chấm, sau đó là …Enter. Hãy thử: > 247*3756; Nếu bạn kết thúc bằng dấu hai chấm, Maple sẽ vẫn tính nhưng không hiển thị kết quả. Các phép tính cộng, trừ, nhân, chia, luỹ thừa, lần lượt được kí hiệu: +, -, *, / , ^ (**). Chú ý một điều là Maple dùng cách tính chính xác, cho nên khi thực hiện : > 25/27+3/51; Để có kết quả gần đúng, dùng hàm evalf: > evalf(%); Maple phân biệt chữ hoa với chữ thường, cho nên Pi khác với pi. Pi là hằng số = 3.141592654, trong khi đó pi là chữ cái Hi Lạp Để tìm hiểu thêm một lệnh nào đó chưa biết, bạn có thể đọc phần Help hoặc đơn giản hơn là nhấn F1 sao khi đã đặt con trỏ vào và với 1 lần Click. 8 Biến và hàm: phép gán (một hàm số hay một giá trị nào đó cho một biến) được thực hiện bằng cách dùng kí hiệu := > alpha:=5; Kiểm tra lại: > 4*alpha+12; Để trả tự do lại cho biến alpha, bạn dùng lệnh: > alpha:='alpha'; Định nghĩa hàm (cái này quan trọng!) có hai cách: Cách 1: gán cho nó một biến số. > f:=x^2; Để tính giá trị của f: > x:=1; > f; Hoặc: 9 > subs(x=1,f); Cách 2 : > f:=x->x^2; > f(1); Lúc này ta có thể tính giá trị của hàm tại biến x bằng kí hiệu quen thuộc f(x).Hãy xem xét khả năng của Maple trong việc biến đổi tính toán các biểu thức đại số: Lệnh simplify thu gọn một biểu thức > f:=(1+x)/x+(1-x)/x; > simplify(f); Lệnh expand khai triển một biểu thức: > f:=(x^2-4)*(x+1)*(x-2)*(x^2+x+1); > expand(f); Lệnh Factor biến đổi biểu thức thành nhân tử: > factor(sin(x)^3-cos(x)^3); 10 [...]... a[1 n-1] Quá trình dừng lại khi đống chỉ còn lại một phần tử Mô phỏng heap sort bằng Maple > parent:=i->floor(i/2); > > > 17 > > > > > > 18 > > > > > > > > > > 19 > > Thuật toán quick sort Mô phỏng bài toán Sắp xếp nhanh (Quicksort), còn được gọi là sắp xếp kiểu phân chia (part sort) là một thuật toán sắp xếp phát triển bởi C.A.R Hoare, dựa trên phép phân chia danh sách được sắp thành hai danh sách con... thích hợp phương trình mặt phẳng cắt nó, chúng ta có thể thu được thiết diện là một trong các đường conic 14 Bằng các gói lệnh chuyên nghiệp khác, Maple còn làm được rất nhiều các nghiên cứu có giá trị BÀI TẬP VẬN DỤNG 1 Thuật toán heap sort Mô phỏng bài toán Mỗi mảng a[1 n] có thể xem như một cây nhị phân gần đầy (có trọng số là các giá trị của mảng), với gốc ở phần tử thứ nhất, con bên trái của đỉnh... (a[j] > X) j++; Bước 2c: Nếu i < j // a ≥ X ≥ a[j] mà a[j] đứng sau a Hoán vị ( a, a[j]); Bước 3: Nếu i < j; Lặp lại Bước 2 // chưa xét hết mảng Nếu I > j; Dừngcho chiến lược chia để trị 21 Mô phỏng quick sort bằng Maple > 22 > > > > 23 > > > > > > > > > 24 > > > > 25 ... con của nó cho đên khi hoặc gặp đỉnh lá (Thủ tục DownHeap trong giả mã dưới đây) Vun một mảng thành đống Để vun mảng a[1 n] thành đống ta vun từ dưới lên, bắt đầu từ phần tử a[j]với j =Int(n/2) ngược lên tới a[1] (Thủ tục MakeHeap trong giả mã dưới đây) kho qua Sắp xếp bằng vun đống Đổi chỗ (Swap): Sau khi mảng a[1 n] đã là đống, lấy phần tử a[1] trên đỉnh của đống ra khỏi đống đặt vào vị trí cuối cùng... ban đầu chỉ có thứ tự khi các dãy con 1, 3 được sắp Để sắp xếp dãy con 1 và 3, ta lần lượt tiến hành việc phân hoạch từng dãy con theo cùng phương pháp phân hoạch dãy ban đầu vừa trình bày Giải thuật: Giải thuật phân hoạch dãy a[1…n] thành hai dãy con gồm 3 bước: Bước 1: chọn tùy ý 1 phần tử a[k] trong dãy làm giá trị mốc L ≤ k ≤ R : a[k] =X; i = L; j = R; Gợi ý các cách chọn phần tử mốc Chọn phần... int(f,x);#nguyen ham cua f > int(f,x=0 3);#tich phan xac dinh cua f tu 0 toi 3 11 > evalf(%); Tích phân thì luôn tính được, tuy nhiên nguyên hàm thì không phải lúc nào Maple cũng tính ra Chẳng hạn trường hợp sau: > h:=sin(x)/g(x); > int(h,x);#khong phai bao gio Maple cung tim ra nguyen ham > evalf(int(h,x=0 1)); Đồ thị hai chiều: ta dùng lệnh Plot để vẽ > f:=exp(-x)*sin(3*x); > plot(f,x=0 3);# ve ham f trong khoang . tử Mô phỏng heap sort bằng Maple > parent:=i->floor(i/2); > > > 17 > > > > > > 18 > > > > > > > > > > 19 >. 19 > > Thuật toán quick sort Mô phỏng bài toán Sắp xếp nhanh (Quicksort), còn được gọi là sắp xếp kiểu phân chia (part sort) là một thuật toán sắp xếp phát triển bởi C.A.R. Hoare, dựa trên. THÀNH PHỐ HỒ CHÍ MINH CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT Tiểu luận : MÔ PHỎNG THUẬT TOÁN HEAP SORT & QUICK SORT TRÊN MAPLE Giảng viên hướng dẫn : PGS.TS Đỗ Văn Nhơn Học viên thực hiện :

Ngày đăng: 23/11/2014, 09:09

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan