的面試問題,對於第一套位搜索:在一個巨大的位圖
在停車位,可容納萬人的汽車,你需要找到一個免費停車位。在插槽可能的位置沒有條件,即,停車場可以有多個入口並且在入口附近找到一個插槽等等,並不重要。問題是應該使用什麼樣的數據結構以及各種操作的複雜性。
我建議使用一個百萬比特的數組,因爲0/1用於被佔用/空閒的時隙,所以爲了找到空閒的地方,將問題轉換爲尋找第一組比特。不要假設有多少輛汽車等等,即位陣列可能稀疏或密集。
什麼是在一個巨大的位圖中找到一個位的最快方法?作爲方案,我確實建議使用二進制搜索+有效的ffs()。
如果我們不能假設有關數組內容的任何內容,那麼二分查找在這裏不會有幫助;你將不得不使用線性搜索。 – 2012-07-20 14:59:44
在c中,可以遍歷64位組中的插槽(使用uint64_t),並檢查第一個非零值。 – 2012-07-20 15:00:19
我想在Fenwick樹(二進制索引樹,BIT)上進行二分搜索。更新操作需要O(log n)。搜索第一組位是O((log n)^ 2) – nhahtdh 2012-07-20 15:01:10