我正在研究確定String
是否包含所有唯一字符的方法實現的時間複雜性。平均案例大O和排序的影響
基本,蠻力,方法是在同一時間通過String
一個字符來迭代保持的HashSet
看到字符。對於迭代中的每個字符,我們檢查Set
是否已經包含它,如果是,則返回false
。如果搜索到整個String
,則返回true
。作爲最壞情況的複雜度,這將是O(n)
。平均情況是什麼? O(n/2)
?
如果我們試圖通過將String
排序爲char
數組來優化這個數組,它的效率會更高還是更低?排序通常需要O(n log n)
,這比O(n)
差,但排序的String
允許更早檢測到重複字符(特別是對於長字符串)。
我們說最壞的情況是O(n^2 log n)
,但是平均情況會好一些嗎?如果是這樣,那是什麼?
作爲一個簡單的評論,沒有'O(n/2)'這樣的東西,它總是「舍入」去除常量。 – Shirkam
答案取決於你所說的「人物」。如果你有256個字符,那麼對於任何長度爲257的字符串,答案是肯定的,所以你只需要檢查不超過256個元素,因此複雜度爲O(1)。如果你的字符集的大小是「非常大」(比輸入大小大得多),那麼字符基本上不會重複,所以你會發現一個重複的並且以大約爲零的概率進行解救。 –
@ n.m。你有一半是錯誤的。嚴格地說,這個比較時間成本是O(n),因爲它取決於字符串長度。確實,對於一個小的數據集,它可以縮短到一定的時間,但它不能算作真正的符號。 – Shirkam