2011-11-19 58 views
12

http://en.wikipedia.org/wiki/Binary_GCD_algorithmBinary GCD Thuật toán so với Euclid của thuật toán trên máy tính hiện đại

Wikipedia này có một ý nghĩa rất dissatisfying: thuật toán nhị phân GCD là cùng một lúc càng nhiều càng tốt 60% hiệu quả hơn so với tiêu chuẩn Euclid Thuật toán, nhưng như cuối năm 1998 Knuth kết luận rằng chỉ có 15% đạt được hiệu quả trên các máy tính hiện đại của mình.

Còn 15 năm nữa đã trôi qua ... làm thế nào để hai thuật toán này ngăn xếp ngày hôm nay với những tiến bộ trong phần cứng?

GCD nhị phân tiếp tục hoạt động tốt hơn Thuật toán Euclide ở các ngôn ngữ cấp thấp nhưng yếu dần sau sự phức tạp của nó ở các ngôn ngữ cấp cao hơn như Java? Hay là sự khác biệt trong việc tính toán hiện đại?

Tại sao tôi quan tâm bạn có thể yêu cầu? Tôi chỉ như vậy xảy ra phải xử lý như 100 tỷ trong số này ngày hôm nay :) Đây là một bánh mì nướng để sống trong một kỷ nguyên của máy tính (nghèo Euclid).

+0

Bạn có thể có một băng ghế dự bị để kiểm tra chúng, chỉ trong một cho vòng lặp (ví dụ kích thước 1000) tạo danh sách các số ngẫu nhiên, và sau đó cho tất cả các cặp số nhị phân tính toán và trong vòng lặp tính toán euclid gcd, vấn đề? IMO, Vẫn còn trong máy tính hiện đại nhị phân nên nhanh hơn đặc biệt với số lượng lớn hơn. –

+0

Tôi có thể, và điều đó sẽ khá đại diện cho một ngôn ngữ cụ thể trên một bộ xử lý cụ thể trên một hệ điều hành cụ thể. Đây là một hoạt động số đủ phổ biến mà tôi đã tò mò hơn thường những gì các giải pháp ưa thích trong các ứng dụng hiệu suất cao ngày hôm nay. – jkschneider

+0

Nếu bạn phải làm 100 tỷ ngày hôm nay, bất kỳ thời gian nào tranh luận giải pháp hiệu quả nhất sẽ khiến bạn mất nhiều thời gian hơn là chỉ cần thực hiện một hoặc cái kia. –

Trả lời

5

Câu trả lời tất nhiên là "nó phụ thuộc". Nó phụ thuộc vào phần cứng, trình biên dịch, thực hiện cụ thể, bất cứ điều gì tôi quên. Trên các máy có phân chia chậm, GCD nhị phân có khuynh hướng hoạt động tốt hơn thuật toán Euclide. Tôi đã đánh giá nó một vài năm trước trên một Pentium4 trong C, Java và một vài ngôn ngữ khác, tổng thể trong điểm chuẩn đó, gcd nhị phân với bảng tra cứu 256 phần tử đánh bại thuật toán Euclide bằng hệ số 1,6 và gần 3 Euclide đến gần hơn khi thay vì chia ngay lập tức, đầu tiên một vài phép trừ được thực hiện. Tôi không nhớ những con số, nhưng nhị phân vẫn nhanh hơn đáng kể.

Nếu máy có phân chia nhanh, mọi thứ có thể khác nhau, vì thuật toán Euclide cần ít thao tác hơn. Nếu sự khác biệt về chi phí giữa phép chia và phép trừ/ca là đủ nhỏ, nhị phân sẽ chậm hơn. Cái nào tốt hơn trong hoàn cảnh của bạn, bạn phải tìm ra bằng cách chấm điểm chính mình.

Các vấn đề liên quan