Cài đặt trên C#

Một phần của tài liệu tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng (Trang 71 - 79)

Để kiểm chứng thêm thuật toán, tôi đã cài đặt tiếp trên C# cả hai phép toán nhân và chia 2 số nguyên lớn. Thuật toán chia sử dụng phép chia Ấn độ để kiểm tra ngược lại. Giả sử, xét ví dụ sau: lấy 85434 chia cho 37 như hình sau:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 3.9Ví dụ về phép chia Ấn Độ

Ta lần lượt lấy 37 nhân 1, nhân 2, nhân 4…rồi lấy 85434 trừ đi kết quả và ghi nhớ bên cạnh. Sau khi làm lần lượt như thế ta sẽ cộng tất cả các số nhớ và có được kết quả.Kết quả kiểm tra trên các số thực nghiệm trong các kịch bản trên hoàn toàn đúng theo kết quả của phép nhân. Điều này khẳng định tính đúng đắn của thuật toán nhân bằng phương pháp Chia để trị đã trình bày ở trên.

Kịch bản 6: Nhân một số50 chữ số với một số 50 chữ số. --- Input --- Số A: 31253614664505003412764546822764221796504010123746 Số B: 18079232013163190245025920649019581243044942630444 --- Output --- 5650413507695853975337733260365231099546932637825947401449101799102239349906070599944335511869 23224 ---

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Kịch bản 7: Kiểm chứng lại Kịch bản 6 bằng phép chia ngược kết quả.

Kịch bản 8: Nhân một số 100 chữ số với một số 200 chữ số. --- Input --- Số A: 7256118915611561561561561312312315678559563265265226325236323556110232313212312312312313132132 161156 Số B: 1261561561631231313213200326526522632523632355611023231321231231200312312315678559500789564123 3654631261561561631231313213200326526522632523632355611023231321231231200312312315678559500789 564123365463 --- Output --- 9154040710560838345183830011366430412115600820506677351571273228272319216344811020164792562775 8224363597756153680541659673972744312536973279836364701478913531046277221548758972837918539194 7847813747154443715443119703314490142732946106561164235544194801561959773048949229542628026898 37440222200555228 ---

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN

Trong luận văn này, học viên đã tập trung phân tích việc tổ chức dữ liệu cho lớp thuật toán chia để trị và cách đánh giá độ phức tạp đối với các thuật toán chia để trị. Vấn đề chính mà luận văn hướng đến và giải quyết là áp dụng thiết kế thuật toán chia để trị để giải quyết bài toán nhân hai số nguyên lớn – một bài toán quan trọng và có rất nhiều ứng dụng trong lĩnh vực tin học và thưc tế.

Học viên cũng đã phân tích, so sánh cách tiếp cận chia để trị với các hướng tiếp cận trước đó như thuật toán Brust-Force, thuật toán nhân cơ bản, thuật toán nhân Karatsuba- Ofman, thuật toán nhân dựa trên biến đổi Fourier. Các kết quả thực nghiệm cũng cho thấy thuật toán được thiết kế cho hiệu quả tốt khi thực thi trên các số nguyên lớn khắc phục được những nhược điểm của thuật toán nhân Karatsuba-Ofman được coi là hiệu quả nhưng bị hạn chế với k=250 với cả hai cấu trúc dữ liệu là biểu diễn bit và biểu diễn mảng và xâu.

Hướng phát triển tiếp theo luận văn hướng đến là tìm cách song song hóa thuật toán để có thể thực thi trên nhiều CPU cùng lúc và giảm thời gian thực thi của thuật toán. Mở rộng áp dụng cho các lớp bài toán có không gian tính toán lớn và phức tạp như bài toán kiểm tra số nguyên tố, bài toán nhân ma trận.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

TÀI LIỆU THAM KHẢO Tiếng Việt

[1] Nguyễn Xuân Huy, Sáng tạo trong thuật toán và lập trình, NXB Thông tin và truyền thông 2011.

[2] Lê Minh Hoàng, Giải thuật & lập trình, Đại học sư Phạm Hà Nội, 1999 - 2002. [3] Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật, NXB Thống kê, 1999.

Tiếng Anh

[4] Anany Levitin, Introduction to the Design and Analysis of Algorithms,

Villanova University, 2002.

Một phần của tài liệu tổ chức dữ liệu cho lớp thuật toán chia để trị và ứng dụng (Trang 71 - 79)

Tải bản đầy đủ (PDF)

(79 trang)