Hotline: 024.62511017

024.62511081

  Trang chủ   Sản phẩm   Phần mềm Dành cho nhà trường   Phần mềm Hỗ trợ học tập   Kho phần mềm   Liên hệ   Đăng nhập | Đăng ký

Tìm kiếm

School@net
 
Xem bài viết theo các chủ đề hiện có
  • Hoạt động của công ty (726 bài viết)
  • Hỗ trợ khách hàng (498 bài viết)
  • Thông tin tuyển dụng (57 bài viết)
  • Thông tin khuyến mại (80 bài viết)
  • Sản phẩm mới (216 bài viết)
  • Dành cho Giáo viên (549 bài viết)
  • Lập trình Scratch (3 bài viết)
  • Mô hình & Giải pháp (156 bài viết)
  • IQB và mô hình Ngân hàng đề kiểm tra (127 bài viết)
  • TKB và bài toán xếp Thời khóa biểu (242 bài viết)
  • Học tiếng Việt (183 bài viết)
  • Download - Archive- Update (289 bài viết)
  • Các Website hữu ích (70 bài viết)
  • Cùng học (92 bài viết)
  • Learning Math: Tin học hỗ trợ học Toán trong nhà trường (78 bài viết)
  • School@net 15 năm (154 bài viết)
  • Mỗi ngày một phần mềm (7 bài viết)
  • Dành cho cha mẹ học sinh (124 bài viết)
  • Khám phá phần mềm (122 bài viết)
  • GeoMath: Giải pháp hỗ trợ học dạy môn Toán trong trường phổ thông (36 bài viết)
  • Phần mềm cho em (13 bài viết)
  • ĐỐ VUI - THƯ GIÃN (363 bài viết)
  • Các vấn đề giáo dục (1210 bài viết)
  • Bài học trực tuyến (1037 bài viết)
  • Hoàng Sa - Trường Sa (17 bài viết)
  • Vui học đường (275 bài viết)
  • Tin học và Toán học (220 bài viết)
  • Truyện cổ tích - Truyện thiếu nhi (180 bài viết)
  • Việt Nam - 4000 năm lịch sử (97 bài viết)
  • Xem toàn bộ bài viết (8223 bài viết)
  •  
    Đăng nhập/Đăng ký
    Bí danh
    Mật khẩu
    Mã kiểm traMã kiểm tra
    Lặp lại mã kiểm tra
    Ghi nhớ
     
    Quên mật khẩu | Đăng ký mới
     
    Thành viên có mặt
    Khách: 17
    Thành viên: 0
    Tổng cộng: 17
     
    Số người truy cập
    Hiện đã có 89724253 lượt người đến thăm trang Web của chúng tôi.

    Phương pháp khử đệ quy trong QuickSort

    Ngày gửi bài: 26/11/2009
    Số lượt đọc: 4925

    Như chúng ta đã biết, QuickSort là một thuật toán sắp xếp được dùng rộng rãi nhất hơn bất kỳ thuật toán nào khác. QuickSort là phương pháp phổ biến vì khong có cài đặt. Là một trong những phương pháp sắp xếp cơ bản nhưng phương Quick Sort sắp xếp “hướng tổng quát” tốt vì nó làm việc tốt trong các tình huống khác nhau và trong nhiều trường hợp phương pháp này sử dụng ít tài nguyên hơn những phương pháp sắp xếp khác.

    Ý tưởng thuật toán: Quicksort thuộc loại phương pháp “chia để trị”. Nó thực hiện bằng cách phân hoạch một tập tin thành hai phần, sau đó sắp xếp các phần riêng biệt nhau. Như chúng ta đã biết, vị trí chính xác của các phần được phân hoạch phụ thuộc vào tập tin, vì thế thuật toán có cấu trúc đệ quy như sau:

    ++

    procedure quicksort(l, r: integer);

    var i: integer;

    begin

    if r> l then

    begin

    i:= partition(l,r);

    quicksort(l, i-1);

    quicksort(i+1,r);

    end;

    end;

     

    ++

    Vấn đề đặt ra là làm thế nào để có thể khử đệ quy trong chương trình Quicksort này? Rất đơn giản, chúng ta có thể khử đệ quy trong chương trình Quicksort bằng cách dùng một ngăn xếp, lúc nào cần một tập tin con để xử lý, chúng ta lại lấy ra khỏi ngăn xếp. Khi phân hoạch, chúng ta tạo hai tập tin con có thể được đẩy vào trong ngăn xếp. Điều này dẫn đến một cài đặt không đệ quy của Quicksort.

    ++

    procedure quicksort;

    var t, i, l, r: integer;

    begin

    l:=1, r:=N;

    stackint;

    push(l); push(r);

    repeat

    if r>r then

    begin

    i:=partition(l,r);

    if (i-l) > (r-i) then

    begin

    push(l); push(i-1); l:=i+1;

    end

    else begin push(i+1); push(l); r:=i-1; end;

    end;

    else begin r:=pop; l:= pop end;

    until stackempty;

    end;

    +++

    Có thể thấy rằng, chương trình này khác với ý tưởng ban đầu được mô tả ở trên của chúng ta ở hai điểm sau:

    + Thứ nhất, hai tập tin con không đặt trên ngăn xếp theo thứ tự tuỳ ý, nhưng kích thước của chúng sẽ được kiểm tra và tập tin nào có kích thước lớn hơn sẽ được đặt vào trong ngăn xếp trước.

    + Thứ hai là tập tin nào có kích thước nhỏ hơn trong hai tập tin con không được đặt vào ngăn xếp; giá trị của các tham số được khởi động lại.

    Đây chính là kỹ thuật “khử đệ quy phần cuối”. Đối với Quicksort, sự tổ hợp giữa kỹ thuật khử đệ quy này và cơ chế xử lý tập tin có kích thước nhỏ hơn bảo đảm là ngăn xếp chỉ cần chỗ trống cho khoảng lgN đầu vào, bởi vì mỗi đầu vào trên ngăn xếp sau đầu vào trên cùng phải đại diện cho một tập tin con có kích thước nhỏ hơn một nửaso với đầu vào phía trước.

    Trong trường hợp xấu nhất, điều này lại ngược lại với kích thước của ngăn xếp trong các cài đặt bằng đệ quy có thể lớn bằng N (chẳng hạn khi tập tin đã được sắp). Điều này rất khó đối với cài đặt bằng đệ quy của Quicksort: luôn luôn tồn tại một ngăn xếp nằm dưới, trường hợp tập tin kích thước lớn có thể làm cho chương trình chấm dứt không bình thường vì thiếu bộ nhớ, tình trạng này dĩ nhiên không được cho phép đối với một chương trình sắp xếp trong thư viện. Dưới đây chúng ta sẽ xem xét cách tạo ra các trường hợp suy thoái nhưng muốn né tránh vấn đề này tỏng một cài đặt đệ qui rất khó nếu không dùng kỹ thuật khử đệ qui. (Ngay cả chuyển đổi thứ tự xử lý của các tập tin con cũng không giúp gì hơn.)

    Sử dụng thô sơ một ngăn xếp trong chương trình ở trên dẫn đến một chương trình hiệu quả hơn cài đặt đệ qui trực tiếp. Vấn đề là nếu cả hai tập tin con chỉ có một phần tử, một đầu vào với r=lđặt trên ngăn xếp sẽ được lấy ra và huỷ ngay. Vậy phải thay đổi chương trình để cho không có những tập tin như vậy trên ngăn xếp.

    Dĩ nhiên phương pháp không đệ quy xử lý những dạng tập tin con giống như phương pháp có đệ qui với bất kỳ tập tin nào, nó chỉ thực hiện các tập tin con này theo thứ tự khác nhau.

    School@net (Theo THNT)



     Bản để in  Lưu dạng file  Gửi tin qua email


    Những bài viết khác:



    Lên đầu trang

     
    CÔNG TY CÔNG NGHỆ TIN HỌC NHÀ TRƯỜNG
     
    Phòng 804 - Nhà 17T1 - Khu Trung Hoà Nhân Chính - Quận Cầu Giấy - Hà Nội
    Phone: 024.62511017 - 024.62511081
    Email: kinhdoanh@schoolnet.vn


    Bản quyền thông tin trên trang điện tử này thuộc về công ty School@net
    Ghi rõ nguồn www.vnschool.net khi bạn phát hành lại thông tin từ website này
    Site xây dựng trên cơ sở hệ thống NukeViet - phát triển từ PHP-Nuke, lưu hành theo giấy phép của GNU/GPL.