Tôi có một vòng lặp tìm kiếm nhị phân được nhấn nhiều lần trong đường dẫn thực hiện.Trung bình nhanh mà không có phân chia
Một hồ sơ cho thấy rằng phần bộ phận của tìm kiếm (tìm kiếm các chỉ số trung đưa các chỉ số cao và thấp của phạm vi tìm kiếm) thực sự là một phần tốn kém nhất của việc tìm kiếm, bởi một yếu tố của khoảng 4.
(Tôi nghĩ) nó không phải là quan trọng cho tìm kiếm nhị phân hiệu quả để tìm giá trị trung bình chính xác, chỉ là một giá trị gần giữa mà không có thiên vị trong hai hướng.
Có thuật toán bit-twiddling để thay thế mid = (low + high)/2
bằng thứ gì đó nhanh hơn nhiều không?
Chỉnh sửa: Ngôn ngữ là C#, nhưng hoạt động bit tương đương có hiệu lực ở bất kỳ ngôn ngữ nào (mặc dù nó không có lợi ích hiệu suất), đó là lý do tôi để thẻ C# tắt.
Mảng của bạn lớn đến mức nào? Bạn đã thử sử dụng tìm kiếm tuyến tính thay thế chưa? –
Đây thực sự không phải là một thứ có thể là ngôn ngữ bất khả tri - chi tiết về tốc độ hoạt động của loại máy này rất cụ thể. Hoàn toàn có thể là nếu bạn đang đối phó với một ngôn ngữ động được gõ mà bộ phận đang được thực hiện trong toán học dấu chấm động, hoặc một cấu trúc lớn-int đang được sử dụng. Nó cũng được mong đợi trong hầu hết các ngôn ngữ gõ tĩnh mà một cái gì đó như (thấp + cao)/2 sẽ được tự động tối ưu hóa để thêm và một sự thay đổi quyền số học. – Eclipse
"chỉ là một giá trị gần giữa mà không có thiên vị trong hai hướng." Không phân chia số nguyên của bạn bởi 2 có một thiên vị đã? – Nosredna