Phỏng vấn câu hỏi lớn:Đang tìm kiếm các bit đầu tiên thiết lập trong một bitmap
Trong một khe cắm bãi đậu xe có sức chứa triệu xe, bạn cần phải tìm một khe cắm bãi đậu xe miễn phí . Không có điều kiện về nơi vị trí có thể là, nghĩa là, bãi đỗ xe có thể có nhiều lối vào và tìm một khe gần lối vào, v.v., không quan trọng. Câu hỏi là loại cấu trúc dữ liệu nào nên được sử dụng và điều gì sẽ phức tạp trong các hoạt động khác nhau.
Tôi đã đề xuất sử dụng một mảng bit triệu bit, với 0/1 cho vị trí đã chụp/miễn phí, vì vậy để tìm điểm miễn phí câu hỏi được dịch để tìm bit thiết lập đầu tiên. Đừng giả sử bất cứ điều gì về có bao nhiêu chiếc xe, v.v., tức là mảng bit có thể thưa thớt hoặc dày đặc.
Cách nhanh nhất để tìm bit được đặt trong bitmap lớn là gì? Tôi đã đề nghị tìm kiếm nhị phân + ffs hiệu quả() trên mỗi từ làm lược đồ.
Nếu chúng ta không thể giả định bất cứ điều gì về nội dung của mảng, thì tìm kiếm nhị phân sẽ không trợ giúp ở đây; bạn sẽ phải sử dụng tìm kiếm tuyến tính. –
Trong c, bạn có thể đi qua các khe trong nhóm 64-bit (sử dụng uint64_t), và kiểm tra giá trị nonzero đầu tiên. –
Tôi muốn tìm kiếm nhị phân trên cây Fenwick (Cây lập chỉ mục nhị phân, BIT). Cập nhật hoạt động mất O (log n). Tìm kiếm bit thiết lập đầu tiên là O ((log n)^2) – nhahtdh