你並不真正「增加」複雜性。正如你所說,排序是O(n * log n),搜索是O(log n)。如果你對他們做「正常的數學」,那麼它會是(n + 1)* log n,它仍然是n * log n。
當您執行這樣的多個步驟時,您通常會採取最高的複雜度並稱之爲。畢竟,當n足夠大時,n * log n會使log n變矮。
想想這樣:當n是1,000,000時,n * log n是2000萬。 log n是20.那麼20,000,000和20,000,020之間有什麼區別? (log n)項無關緊要。所以(n log n)+(log n)對於所有意圖和目的都等於(n log n)。即使當n是100時,log n也是7.當n甚至是中等大時,(log n)項不會有什麼區別。
在你的特殊情況下,如果你只需要一次搜索列表,那麼順序搜索就是要走的路。如果您需要多次搜索,則必須將m次搜索的成本(m * n)與排序成本進行權衡,然後進行搜索。如果你對最短時間感興趣,並且知道你將搜索列表的次數,那麼如果(m * n)小於(n * log n),則使用順序搜索。否則使用排序然後二進制搜索。
但這不是唯一的考慮因素。在排序列表上進行二進制搜索會爲您提供非常快速的響應時間,而線性搜索對於單個項目可能需要很長時間。如果你可以在程序啓動時對列表進行排序,那麼這可能是最好的方法,因爲一旦程序運行,就會找到(或未找到)項目。對列表進行排序可爲您提供更好的響應時間。在啓動過程中支付分揀費用比在操作過程中遇到非常不可預測的響應時間更好。或者發現你需要進行比你想象的更多的搜索。 。 。
感謝您的回答! – Vikram 2013-11-05 17:16:00