2009-09-27 37 views

Trả lời

12

Thuật toán Euclide (tính gcd) rất nhanh. Khi hai số được rút ngẫu nhiên đồng nhất từ ​​[1, n], số bước trung bình để tính gcdO(log n). Thời gian tính toán trung bình cần thiết cho mỗi bước là bậc hai theo số chữ số.

Có các lựa chọn thay thế hoạt động tốt hơn một chút (nghĩa là, mỗi bước là tùy ý về số lượng chữ số), nhưng chúng chỉ hiệu quả trên các số nguyên rất lớn. Xem, ví dụ: On Schönhage's algorithm and subquadratic integer gcd computation.

+0

Tôi muốn nhận xét rằng hơi thô sơ để đo độ phức tạp của thuật toán số học mà không tính đến chi phí của các phép tính số học. –

+0

Số bước xấu nhất là O (log n), khi hai số là các mục liên tiếp trong dãy Fibonacci. –

+0

@Pavel Shved: Tôi đã xem xét chi phí. cf. câu "Thời gian tính toán trung bình cần thiết cho mỗi bước là bậc hai trong số chữ số." – jason

7

nếu bạn đang chạy trên một máy có phân chia/phần còn lại đắt hơn đáng kể so với ca làm việc, hãy xem xét binary GCD.

+0

Cảm ơn, thú vị đọc –

+0

yeah, một bài viết rất tốt ở đó. – Lazer

+0

Chỉ cần thực hiện điều này trong f # và nhanh hơn gấp 2 lần so với GCD Euclid truyền thống, không thể cung cấp số chính xác vì có mã khác đang đo đạc các phép đo của tôi, tuy nhiên nhanh hơn 2x. Tốt tìm Jason. – gatapia

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