2011-09-15 37 views
5

Cho một phần tử và một mảng, phương thức chỉ mục Ruby # trả về vị trí của phần tử trong mảng. Tôi đã triển khai phương pháp chỉ mục của riêng mình bằng cách sử dụng tìm kiếm nhị phân mà tôi mong đợi sẽ hoạt động tốt hơn công cụ được tích hợp sẵn. Trước sự ngạc nhiên của tôi, cái được xây dựng trong chạy nhanh gấp ba lần so với tôi trong một thử nghiệm.Chỉ mục Ruby # Phương pháp VS Tìm kiếm nhị phân

Bất kỳ Rubyist nào biết lý do tại sao?

+2

Ai đã nói phương thức '# index' của Ruby chưa được triển khai với tìm kiếm nhị phân? Và hơn nữa, ai nói rằng phương pháp đó đã được thực hiện trong Ruby? :-) –

+0

@ Platinum Azure Oh Tôi thấy, nó có thể được thực hiện trong C với tìm kiếm nhị phân. Cảm ơn rất nhiều! –

+0

Bạn đã hiểu! :-) –

Trả lời

10

Được xây dựng trong #index is not a binary search, nó chỉ là một tìm kiếm lặp đi lặp lại đơn giản. Tuy nhiên, nó được thực hiện trong C chứ không phải Ruby, vì vậy tự nhiên nó có thể là một số đơn đặt hàng của cường độ nhanh hơn.

+0

Cảm ơn. Đó là thực sự kỳ lạ, mặc dù. Có lý do nào khiến họ không chấp nhận phương pháp tìm kiếm nhị phân không? –

+1

Một tìm kiếm nhị phân liên quan đến việc có thể so sánh hai phần tử, trái ngược với việc chỉ có thể xem hai elemnt có bằng nhau hay không. Cũng lưu ý tài liệu nói rằng nó trả về đối tượng * đầu tiên * bằng đối số - tìm kiếm nhị phân sẽ không luôn trả về phần tử đó. Bên cạnh đó, phiên bản #bsearch của tôi (giả sử mảng được sắp xếp) dường như không chậm hơn #index: https://gist.github.com/1220440 –

+0

Tôi cho rằng việc triển khai #bsearch của bạn có thể đánh bại sự khác biệt giữa Ruby và C với điều đó giữa tìm kiếm nhị phân và tìm kiếm tuần tự? –

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