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

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

25 1,2K 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 25
Dung lượng 1,71 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 đồ

Trang 1

ĐẠ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ơnHọc viên thực hiện : Đoàn Vũ Ngọc DuyMSSV : CH1101010

Trang 2

GIỚI THIỆU 3

Đ ẶC ĐIỂM .4

N HỮ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 (H ELP ) TRONG M APLE 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 T HUẬT TOÁN HEAP SORT 15

T HUẬT TOÁN QUICK SORT 20

Trang 3

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

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

Trang 4

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

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

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

thật là quan trọng với những sinh viên sư phạm toán cũng như những

Trang 5

người làm công tác nghiên cứu toán học

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 " :"

Trang 6

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

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

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

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ể:

Trang 7

• Nếu đã biết tên lệnh thì từ dấu nhắc gõ vào > factor

trong gói đó

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:

Đầu tiên hãy mở một trang (worksheet) mới bằng cách chọn File/New Một trang

Trang 8

trắng với dấu [> sẽ hiện ra:

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

Trang 9

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

Trang 11

Giải hệ phương trình dùng lệnh Solve, tuy nhiên trước khi giải phải Restart để trả

> df2:=diff(f,x$2);#dao ham bac hai cua f

Nguyên hàm, tích phân dùng lệnh int

> f:=sin(x);

> int(f,x);#nguyen ham cua f

> int(f,x=0 3);#tich phan xac dinh cua f tu 0 toi 3

Trang 13

> plot(f,x=0 3,y=-0.3 1,color=blue);# Giới hạn trục y chọn tọa độ màu xanh

Đồ thị 3 chiều: Ta xét một minh hoạ hình ảnh tự nhiên của các đường conic như giao tuyến của mặt nón và một mặt phẳng cắt nó

> with(plots):

Trang 14

>animate(plot3d,[y/3-10,x=

20 t,y=20 t,color=red,style=PATCHNOGRID],t=18 17,ax es=framed,background=plot3d([z*cos(t),z*sin(t),z],z=20 0,t=-Pi Pi));

Kết quả là một hình 3 chiều mà đặc biết là bạn có thể xoay nó và quan sát theo mọi góc độ

Bằng cách thay đổi 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

Trang 15

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[i] là a[2*i] con bên phải là a[2*i+1] (nếu mảng bắt đầu từ 1 còn nếu mảng bắt đầu từ 0 thì 2 con là a[2*i+1] và a[2*i+2] ) (nếu 2*i<=n hoặc 2*i+1<=n, khi đó các phần tử có

Trang 16

Ta cũng sẽ gọi mảng như vậy là đống Như vậy trong đống a[1] (ứng với gốc của cây) là phần tử lớn nhất Mảng bất kỳ chỉ có một phần tử luôn luôn là một đống Một đống cực tiểu được định nghĩa theo các bất đẳng thức ngược lại: a[i]<=a[2*i] và a[i]<=a[2*i+1] Phần tử đứng ở gốc cây cực tiểu là phần tử nhỏ nhất.

Để 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 quaSắ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 n, và chuyển phần tử thứ cuối cùng a[n] lên đỉnh đống thì phần tử a[n] đã được đứng đúng vị trí

Vun lại

Phần còn lại của mảng a[1 n-1] chỉ khác cấu trúc đống ở phần tử a[1] Vun lại mảng này thành đống với n-1 phần tử

Trang 17

Tiếp tục với mảng 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);

>

>

>

Trang 20

>

>

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 Phương pháp này là minh họa rõ ràng nhất Để sắp xếp một danh sách a[1…n] ta chia nó thành hai danh sách bằng cách so sánh từng phần tử của danh sách với một phần tử được chọn làm phần tử chốt

Những phần tử nhỏ hơn phần tử chốt được đưa về phía trước và nằm trong danh sách con thứ nhất, các phần tử lớn hơn chốt được đưa về phía sau và thuộc danh sách đứng sau Cứ tiếp tục chia như vậy tới khi các danh sách con đều có độ dài bằng 1

Trang 21

Ở đây ta thấy xuất hiện 3 danh sách con, trong đó:

Danh sách thứ 2 đã được sắp xếp Nếu danh sách 1 và 3 chỉ có một phần tử thì dãy a[i…n] đã được sắp xếp xong Nếu danh sách 1 và 3 có hơn một phần tử thì dãy 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

Bước 2: Phát hiện và hiệu chỉnh cặp phần tử a, a[j] nằm sai chỗ:

Bước 2a: Trong khi (a < X) i++;

Bước 2b: Trong khi (a[j] > X) j++;

Bước 2c: Nếu i < j // a ≥ X ≥ a[j] mà a[j] đứng sau a

Trang 22

Mô phỏng quick sort bằng Maple

>

Trang 23

>

>

>

>

Trang 25

>

>

>

>

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

HÌNH ẢNH LIÊN QUAN

Đồ thị 3 chiều: Ta xét một minh hoạ hình ảnh tự nhiên của các đường conic như  giao tuyến của mặt nón và một mặt phẳng cắt nó - mô phỏng thuật toán heap sort & quick sort trên maple
th ị 3 chiều: Ta xét một minh hoạ hình ảnh tự nhiên của các đường conic như giao tuyến của mặt nón và một mặt phẳng cắt nó (Trang 13)

TỪ KHÓA LIÊN QUAN

w