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: 9
    Thành viên: 0
    Tổng cộng: 9
     
    Số người truy cập
    Hiện đã có 89679220 lượt người đến thăm trang Web của chúng tôi.

    Giải bài toán nhân 2 đa thức với phương pháp chia - để - trị

    Ngày gửi bài: 27/11/2008
    Số lượt đọc: 3402

    Bài toán: Tính giá trị của đa thức bậc N-1 tại các căn bậc N của đơn vị.

    Chúng ta có thể có từng phần thuật toán nhân hai đa thức chỉ sử dụng khoảng NlgN phép toán. Có thể thấy sơ đồ tổng quát là:

    - Tính giá trị của đa thức nhập vào tại các căn bậc (2N-1) của đơn vị.

    - Nhân hai giá trị tìm được tại mỗi điểm.

    - Nội suy để tìm kết quả bằng cách tính giá trị cảu đa thức xác định chỉ bởi các số được tính tại các căn bậc (2N-1) của đơn vị.

    Mô phỏng trên có thể chuyển trực tiếp sang thành một chương trình trong đó sử dụng một thủ tục để tính giá trị của đa thức bậc N-1 tại các căn bậc N của đơn vị. Tuy nhiên, các phép toán này thực hiện trên số phức mà trong Pascal lại không có xây dựng kiểu số phức. Do đó, ta cần có một thủ tục để xác định kiểu số phức cũng như các phép toán trên các số này. Với giả định là kiểu số phức ta đã có, ta có chương trình tính giá trị sau: 

    eval(p,outN, 0);

    eval(q, outN, 0);

    for i:= 0 to outNdo r[i]:= p[i]*q[i];

    eval(r,outN, 0);

    for i:=1 to N do

    begin t:= r[i]; r[i]:= r[outN+1]; r[outN+1-i]:= t; end;

    for i:=0 to outN do r[i]:=r[i]/(outN+1);

    Trong chương trình này, ta giả sử biến toàn cục outN là 2N-1 và q, p, r là các mảng số phức đánh từ 0 tới 2N-1. Hai đa thức được nhân q.p có cấp N-1 và các hệ số thêm vào để được mảng 2N-1 phần tử là các số không. Thủ tục eval thay các hệ số đã cho như là biến thứ nhất của đa thức bởi các giá trị cảu đa thức tính tại các căn của đơn vị. Biến thứ hai xác định bậc của đa thức bà biến thứ ba sẽ mô tả dưới đây. Chương trình trên tính tích của p.q và để kết quả ở mảng r.

    Tuy nhiên, chương trình đệ quy có các mảng có thể gây khó khăn khi cài đặt. Ngoài ra, còn một bài toán thông thường là quản lý vùng chứa bằng cách dùng lại nó một cách thông minh. Điều ta cần ở đây là có một thủ tục đệ quy đưa vào một mảng N+1 hệ số và cho ra N+1 giá trị trong cùng một mảng. Tuy nhiên, quá trình đệ quy lại bao gồm việc xử lý hai mảng rời nhau: các hệ số lẻ và chẵn. Sự xáo trộn lý tưởng là cái mà ta cần. Ta có thể đưa các hệ số lẻ vào trong một mảng con (nửa đầu) và các hệ số chẵn vào một mảng con (nửa sau) bằng cách thực hiện sự “không xáo trộn lý tưởng” của dữ liệu nhập.

    Dĩ nhiên các giá trị căn số phức cũng cần cài đặt. Ta có:

    wiN = cos(2∏j/(N+1) + isin(2∏j/(N+1))

    Sử dụng các hàm lượng giác quy ước ta có thể tính dễ dàng giá trị wNj. Trong chương trình dưới đây, mảng w được giả định là chứa các căn bậc (outN+1) của đơn vị.

    Ta có chương trình sau:

    procedure eval(var p:poly; N, k: integer);

    var i, j: integer;

    begin

    if N=1

    then begin t:=p[k]; p1:= p[k+1]; p[k]:= t+p1; p[k+1]:= t-p1;

    end

    else begin

    for i:= 0 to N div 2 do

    begin j:= k+2*i; t[i]:= p[j]; t[t+1+N div 2]: = p[j] +1;

    end;

    fori:= 0 to N do p[k+i]:= t[i];

    eval(p,N div 2, k);

    eval(p, N div 2, k +1 +N div 2);

    j:= (outN +1) div (N+1);

    for i:= 0 to N div 2 do

    begin t:= w[i*j]*p[k+(N div 2)+ 1 +i];

    t[i]:= p[k+i]+t; t[i+ N div 2) +1]:= p[k+i]*t

    end;

    for i:=0 to N do p[k+i]:= t[i]

    end;

    end;

    Chương trình này chuyển đa thức bậc N vào mảng con p[k…k+N] bằng cách dùng phương pháp đệ quy. (Để đơn giản, mã này giả sử rằng N+1 là một luỹ thừa của 2, mặc dầu điều này bỏ đi dễ dàng). Nếu N=1, ta dễ dàng tính giá trị tại 1 và -1. Với N≠ 1 thủ tục này đầu tiên sẽ xáo trộn, rồi gọi đệ quy chính nó để chuyển sang bài toán cho N/2, sau đó kết hợp các kết quả tính toán như đã mô tả trên. Để nhận được các căn vị cần thiết, chương trình chọn từ mảng tại một khoảng các định bởi biến i. Ví dụ, nếu outN=15, các căn bậc 4 của đơ nvị tìm thấy trong w[0], w[4], w[8], w[12]. Điều này làm giảm bớt số tính toán các căn của đơ nvị sử dụng.

    *** Hai đa thức cấp N có thể được nhân 2NlgN + 0(N) phép nhân phức.

    Sự áp dụng phương pháp ở thuật toán trên rộng hơn nhiều so với phép toán nhân hai đa thức mà chúng ta trình bày ở trên; và thuật toán này đã được sử dụng mạnh và khảo sát trong nhiều lĩnh vực khác nhau. Tuy nhiên, các nguyên tắc chính trong các áp dụng cũng tương tự như trong việc nhân đa thức được xem xét ở đây. Phương pháp này là một ví dụ cổ điển về phương pháp “chia-để - trị”.

    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.