Độ phức tạp của cơ sở nhật ký là gì?Độ phức tạp của chức năng nhật ký là gì?
Trả lời
Điều này thực sự phụ thuộc vào miền của giá trị bạn muốn tính toán lôgarit.
Đối với IEEE đôi, nhiều bộ xử lý có thể lấy logarit trong một lệnh lắp ráp đơn; x86 có các chỉ dẫn FYL2X và FYL2XP1, ví dụ. Mặc dù thường hướng dẫn như thế này sẽ chỉ mất logarit ở một số cơ sở cố định, chúng có thể được sử dụng để lấy logarit trong các căn cứ tùy ý bằng cách sử dụng thực tế là
log một b = log c b/log c a
đơn giản bằng cách lấy hai logarit và tìm thương.
Đối với các số nguyên chung (độ chính xác tùy ý), bạn có thể sử dụng bình phương lặp lại kết hợp với tìm kiếm nhị phân để nhận logarit chỉ sử dụng các phép tính số học O (log log n) (mỗi lần bạn đặt một số bạn tăng gấp đôi số mũ) bạn chỉ có thể viết nhật ký nhật ký số n lần trước khi bạn đã vượt quá giá trị của nó và có thể thực hiện tìm kiếm nhị phân). Sử dụng some cute tricks with Fibonacci numbers, bạn có thể thực hiện việc này chỉ trong không gian O (log n). Nếu bạn đang tính toán binary logarithm, có một số thủ thuật dễ thương bạn có thể sử dụng với các thay đổi bit để tính toán giá trị trong thời gian ngắn hơn (mặc dù độ phức tạp tiệm cận là như nhau).
Đối với các số thực tùy ý, logic khó hơn. Bạn có thể sử dụng phương pháp Newton hoặc chuỗi Taylor để tính logarit trong một độ chính xác nhất định, mặc dù tôi thú nhận rằng tôi không quen thuộc với các phương pháp để thực hiện điều này. Tuy nhiên, bạn hiếm khi thực sự cần phải làm điều này bởi vì hầu hết các số thực là IEEE tăng gấp đôi và có các thuật toán tốt hơn (hoặc thậm chí là hướng dẫn phần cứng) trong trường hợp đó.
Hy vọng điều này sẽ hữu ích!
Đối với các số nguyên thường có một lệnh (hoặc một chuỗi ngắn, để thực hiện 'CTZ (x & (x - 1)) 'hoặc' wordsize - LZC (x) ') - nhưng AFAIK không giúp cho độ phức tạp thời gian (chỉ là tốc độ thực tế) – harold
@ harold- Đúng, mặc dù chỉ hoạt động cho logarit nhị phân . – templatetypedef
@templatetypedef Mà bạn có thể nhân với một yếu tố không đổi để có được logarit trong bất kỳ cơ sở nào khác, như bạn vừa chứng minh. :) –
- 1. Độ phức tạp của OrderedDictionary là gì?
- 2. Độ phức tạp của set_intersection trong C++ là gì?
- 3. chi phí/phức tạp của một cuộc gọi String.IndexOf() chức năng là gì
- 4. Độ phức tạp của LinkedList.getLast() trong Java là bao nhiêu?
- 5. Độ phức tạp của ưu tiênQueue addAll()
- 6. Độ phức tạp của HashMap.containsValue() trong java là bao nhiêu?
- 7. Độ phức tạp của HashMap.containsKey() trong java là bao nhiêu?
- 8. Độ phức tạp của thuật toán
- 9. Độ phức tạp của thuật toán
- 10. Độ phức tạp thời gian của random.sample
- 11. Độ phức tạp thời gian của hàm này trong sơ đồ là gì?
- 12. Độ phức tạp của thời gian nguyên trong Haskell
- 13. Độ phức tạp thời gian chạy của câu lệnh switch là gì?
- 14. Độ phức tạp của thời gian đi qua cây là gì?
- 15. Độ phức tạp của thời gian A * là gì và nó bắt nguồn như thế nào?
- 16. Độ phức tạp của vòng lặp lồng nhau này cho vòng lặp ba là gì?
- 17. Độ phức tạp thời gian chạy của các hàm danh sách python là gì?
- 18. Độ phức tạp của trường hợp xấu nhất đối với việc sắp xếp nhóm là gì?
- 19. Độ phức tạp nhất của trò chơi N-Queens là gì?
- 20. Các công cụ phân tích phức tạp mã vượt quá độ phức tạp của chu trình
- 21. Độ phức tạp của các hoạt động bộ python?
- 22. Tính phức tạp của tiêu chuẩn :: find_end là Big-O
- 23. phức tạp tiệm cận của printf
- 24. Độ phức tạp của hàm find() trong std :: map?
- 25. F # bằng độ phức tạp của toán tử
- 26. Độ phức tạp về thời gian đếm
- 27. Tại sao độ phức tạp của thuật toán này là O (1)
- 28. phức tạp của .NET List.sort()
- 29. Độ phức tạp thời gian của thuật toán Prim
- 30. Độ phức tạp về thời gian của system.out.println
Đây có phải là bài tập về nhà không? –
Điều đó có phụ thuộc vào thuật toán được sử dụng không? Bảng tra cứu là O (1) chẳng hạn. – Thilo
@Tony: [No] (http://math.stackexchange.com/questions/61759/project-euler-problem-25) –