javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

算法-時間復雜度和空間復雜度之間的差異?

我已經看到,在大多數情況下,時間復雜度與空間復雜度有關,反之亦然。 例如,在數組遍歷中:

for i=1 to length(v)
    print (v[i])
endfor

在這里很容易看出,算法的時間復雜度為O(n),但在我看來,空間復雜度也是n(也表示為O(n)?)。

我的問題是:算法的時間復雜度可能不同于空間復雜度嗎?

trans by 2020-02-29T17:38:45Z

搜索-O(1)怎么了?

我在討論涉及哈希和搜索類型的算法時注意到了O(1)的一種非常奇怪的用法,通常是在使用語言系統提供的字典類型或使用數組使用的字典或哈希數組類型的情況下 索引符號。

基本上,O(1)表示受恒定時間和(通常)固定空間限制。 一些相當基本的操作是O(1),盡管使用中間語言和特殊的VM往往會使此處的思維變形(例如,一個人如何在原本為O(1)的活動中攤銷垃圾收集器和其他動態進程)。

但是,忽略了延遲的攤銷,垃圾回收等等,我仍然不明白,除非在非常特殊的條件下,假設某些涉及某種搜索的技術可以是O(1),這是如何飛躍的。

盡管我之前已經注意到了這一點,但在Pandincus問題中僅顯示了一個示例,“在C#.NET中,'Pro''集合可用于在O(1)時間內獲取項目嗎?”。

正如我在此處所述,我所知道的唯一提供O(1)訪問作為保證范圍的集合是帶有整數索引值的固定范圍數組。 該推定是通過對使用O(1)操作來定位具有該索引的單元的隨機存取存儲器的某種映射實現的。

對于涉及某種搜索以確定不同索引類型(或具有整數索引的稀疏數組)的匹配單元格位置的集合,生存并不容易。 特別是,如果有沖突,并且可能發生擁塞,則訪問不完全是O(1)。 并且,如果集合是靈活的,則必須認識到并分攤擴展其基礎結構(例如樹或哈希表)所需的費用,以緩解擁塞緩解(例如,高碰撞率或樹不平衡)。

我永遠也不會想到將這些靈活而動態的結構稱為O(1)。 但是,我看到它們作為O(1)解決方案提供,而沒有確定必須保證要實際擁有O(1)訪問權限的條件(并且該常數可以忽略不計)。

問題:所有這些準備工作確實是一個問題。 O(1)周圍的傷亡情況是什么?為什么這么盲目地接受它? 是否認識到即使O(1)接近恒定也可能不希望地大? 還是O(1)只是將計算復雜性概念分配給非正式使用? 我很困惑

更新:答案和評論指出了我自己定義O(1)的地方,我已經修復了這一點。 我仍在尋找良好的答案,在某些情況下,某些評論主題比其答案更有趣。

trans by 2020-02-20T02:50:07Z

算法-為什么QuickSort是n log n的直觀解釋?

是否有人能夠對“ QuickSort n log n”的構成給出“普通英語”的直觀但正式的解釋? 根據我的理解可以领救济金的游戏,它必須傳遞n個項目,并且它會記錄n次...我不確定如何將它寫成為什么它會記錄n次的記錄。

trans by 2020-02-19T15:16:57Z

algorithm-O(polylog(n))是什么意思? 特別是,polylog(n)是如何定義的?

簡要:
當學術(計算機科學)論文說“ O(polylog(n))”時,它們是什么意思? 我對我非常熟悉的“ Big-Oh”表示法并不感到困惑,而是對函數polylog(n)感到困惑。 我不是在說復雜的分析函數Lis(Z)。 還是他們? 可能完全不同嗎?

更多詳情:
主要出于個人利益,我最近一直在瀏覽有關壓縮后綴數組的各種論文,例如 向后搜索的優勢-高效的輔助內存和壓縮后綴數組的分布式實現。 陳述的計算復雜性估計有時涉及polylog(n)可以领救济金的游戏,這是我不熟悉的功能。

維基百科給出了polylogs(z)的定義,該定義似乎主要是關于復雜分析和解析數論的。 我的懷疑是,它與壓縮文件中的polylog(n)無關,盡管我很樂意聽取其他更博學的人的意見。 如果是這種情況,為什么省略下標確實是合理的呢?

我唯一的其他猜測是,也許O(polylog(n))的意思是“漸近到log(n)的多項式函數”。 但這只是一個猜測:我沒有任何證據,這會導致啟動符號的濫用。

無論如何,將不勝感激地鏈接到一個權威的定義!

trans by 2020-02-18T09:03:02Z

數據結構-python集操作的時間復雜度?

Big O表示法中每個python設置操作的時間復雜度是多少?

我將Python的set類型用于對大量項目的操作。 我想知道每個操作的性能如何受到集合大小的影響。 例如,添加和成員資格測試:

myset = set()
myset.add('foo')
'foo' in myset

谷歌搜索并沒有占用任何資源,但是考慮到Python的set實現的時間復雜性似乎是合理的。

如果存在的話,鏈接到這樣的東西會很棒。 如果那里沒有這樣的東西,那么也許我們可以解決嗎?

用于查找所有設置操作的時間復雜度的額外標記。

trans by 2020-01-03T18:49:23Z

算法-O(n)和O(log(n))之間的差異-哪個更好,O(log(n))到底是什么?

這是我的第一門數據結構課程,每次講座/ TA講座,我們都談論O(log(n))。 這可能是一個愚蠢的問題,但是如果有人可以向我確切解釋這是什么意思,我將不勝感激!

trans by 2020-01-01T11:33:39Z

為什么此算法的Big-O復雜度為O(n ^ 2)?

我知道此算法的big-O復雜度是j = n * n,但是我不明白為什么。

int sum = 0; 
int i = 1; j = n * n; 
while (i++ < j--) 
  sum++;

即使我們在開始時設置了j = n * n,但我們在每次迭代時都將i遞增,并將j遞減,因此,得出的迭代次數是否不應該比n*n小很多?

trans by 2019-12-26T09:43:40Z

java-O(n!)的示例?

O(n!)函數的一個示例(在代碼中)是什么? 參考n,應該執行適當數量的操作; 也就是說,我在問時間復雜度。

trans by 2019-12-24T22:08:59Z

性能-C ++中的哈希表?

每當需要存儲與特定類型的值(鍵值-例如字符串或其他對象)相關的數據時,我通常都會使用C ++ stdlib映射。 stdlib映射實現基于樹,該樹比標準數組或stdlib向量提供更好的性能(O(log n))。

我的問題是,您是否知道任何提供更好性能的C ++“標準”哈希表實現(O(1))? 與Java API中的Hashtable類中可用的東西類似。

trans by 2019-11-15T16:39:34Z

數組-Java中unshift()與push()的時間復雜度

我知道Java中的unshift()和push()方法之間有什么區別,但是我想知道時間復雜度有什么區別?

我想push()方法是O(1),因為您只是將一個項目添加到數組的末尾,但是我不確定unshift()方法,因為我想您必須“移動”所有其他方法 現有元素向前,我想那是O(log n)還是O(n)?

trans by 2019-10-16T00:45:43Z

mysql - B-Tree vs Hash Tab

在MySQL中,索引類型是b樹,并且訪問b樹中的元素是以對數分攤的時間O(1)

另一方面,訪問哈希表中的元素是在O(1)中。

為什么不使用哈希表而不是b樹來訪問數據庫中的數據?

trans by 2019-09-16T02:32:49Z

算法 - Big-oh vs big-th

可能重復:
Θ(n)和O(n)之間有什么區別?

在我看來,當人們非正式地談論算法復雜性時,他們談論的是大哦。 但在正式情況下,我常常會看到偶爾出現大獎的大角落。我在數學上知道兩者之間的差異,但在英語中,在什么情況下會使用大哦 - 當你的意思是大不正確時,反之亦然(一個示例算法會受到贊賞)?

額外獎勵:為什么人們在非正式談話時似乎總是使用大哦?

trans by 2019-08-27T00:47:25Z

big o - 什么會導致算法具有O(log log n)復雜度?

此早期問題解決了可能導致算法具有O(log n)復雜性的一些因素。

什么會導致算法具有時間復雜度O(log log n)?

trans by 2019-08-20T05:38:03Z

c# - 對LINQ方法的運行時復雜性(Big-O)有什么保證?

我最近開始使用LINQ了,我還沒有真正看到任何LINQ方法的運行時復雜性。 顯然,這里有很多因素在起作用,所以讓我們將討論限制在簡單的2439960672383763456 LINQ-to-Objects提供程序中。 此外,假設作為選擇器/ mutator /等傳入的任何List是廉價的O(1)操作。

很明顯,所有單程操作(Contains,List,HashSet,GetHashCode,IEqualityComparer等)都是O(n),因為它們只需要走序列一次; 雖然這甚至會受到懶惰的影響。

對于更復雜的運營來說,事情變得更加模糊; 類似于集合的運算符(Contains,List,HashSet等)默認使用GetHashCode(afaik),因此假設它們在內部使用哈希表似乎是合理的,使這些運算也成為O(n), 一般來說。 那么使用IEqualityComparer的版本怎么樣?

Contains需要排序,所以很可能我們正在看O(n log n)。 如果它已經排序了怎么辦? 如果我說List并為兩者提供相同的密鑰怎么樣?

我可以使用排序或散列來查看Contains(和List)。 這是什么?

Contains將是List上的O(n),但是HashSet上的O(1) - LINQ是否檢查基礎容器以查看它是否可以加快速度?

真正的問題 - 到目前為止,我一直堅信運營是高效的。 但是,我可以依靠嗎? 例如,STL容器清楚地指定了每個操作的復雜性。 .NET庫規范中的LINQ性能是否有類似的保證?

更多問題(回復評論):
沒有真正想過開銷,但我沒想到會有很多簡單的Linq-to-Objects。 CodingHorror帖子討論的是Linq-to-SQL,在那里我可以理解解析查詢并使SQL增加成本 - 對象提供者也有類似的成本嗎? 如果是這樣,如果您使用聲明性或功能性語法,它會有所不同嗎?

trans by 2019-07-15T11:59:16Z

java - HashMap獲取/放置復雜性

我們習慣說HashMap load factor操作是O(1)。 但是它取決于哈希實現。 默認對象哈希實際上是JVM堆中的內部地址。 我們確定聲稱load factor是O(1)是否足夠好?

可用內存是另一個問題。 據我所知,從javadocs,HashMap load factor應為0.75。 如果我們在JVM中沒有足夠的內存并且load factor超出限制怎么辦?

所以,看起來O(1)似乎不能保證。 它有意義還是我錯過了什么?

trans by 2019-07-13T03:49:09Z

字典 - 永遠不會被任何東西匹配的正則表達式

這可能聽起來像一個愚蠢的問題,但我與我的一些開發人員進行了長時間的談話,這聽起來很有趣。

所以; 你的想法是什么 - 正則表達式是什么樣的,永遠不會被任何字符串匹配!

編輯:我為什么要這個? 好吧,首先是因為我發現想到這樣一個表達式很有趣,其次因為我需要它來制作一個腳本。

在該腳本中,我將字典定義為Dictionary<string, long>.如您所見,它包含字符串和表達式。

基于該字典,我創建的方法都使用這個字典作為他們應該如何完成工作的參考,其中一個匹配正則表達式與解析的日志文件。

如果表達式匹配,則添加另一個表達式返回的值Dictionary<string, long>。 因此,為了捕獲與字典中的表達式不匹配的任何日志消息,我創建了一個名為“unknown”的新組。

對于這個組,添加了與其他任何東西不匹配的所有內容。 但為了防止“未知”表達式(偶然)不匹配日志消息,我不得不創建一個絕對不會匹配的表達式,無論我給它什么字符串。

因此,你有理由這個“不是一個真正的問題”......

trans by 2019-07-12T22:40:34Z

算法 - 如何理解背包問題是NP完全?

我們知道背包問題可以通過動態編程以O(nW)復雜度來解決。 但我們說這是一個NP完全問題。 我覺得這里很難理解。

(n是項目數.W是最大音量。)

trans by 2019-06-21T00:28:13Z

語言不可知 - O(N log N)復雜性 - 與線性相似?

所以我想我會因為提出這樣一個微不足道的問題而被埋葬,但我對某些事情感到有些困惑。

我已經在Java和C中實現了quicksort,我正在做一些基本的比較。 該圖表以兩條直線形式出現,其中C比Java對應的快了4ms,超過100,000個隨機整數。

Results

我的測試代碼可以在這里找到;

Android的基準

我不確定(n log n)線是什么樣的,但我不認為它是直的。 我只是想檢查這是否是預期的結果,我不應該嘗試在我的代碼中找到錯誤。

我將公式固定在excel中,對于10號基礎,它似乎是一條直線,在開始時有一個扭結。 這是因為log(n)和log(n + 1)之間的差異是線性增加的嗎?

謝謝,

GAV

trans by 2019-06-12T01:51:21Z

數學 - 大O(logn)日志基數e?

對于二進制搜索樹類型的數據結構,我看到Big O表示法通常標記為O(logn)。 在日志中使用小寫的“l”,這是否意味著日志基數e(n)如自然對數所描述的那樣? 抱歉這個簡單的問題,但我總是無法區分不同的隱含對數。

trans by 2019-06-08T22:06:56Z

mysql - B-Tree vs Hash Tab

在MySQL中,索引類型是b樹,并且訪問b樹中的元素是以對數分攤的時間O(1)

另一方面,訪問哈希表中的元素是在O(1)中。

為什么不使用哈希表而不是b樹來訪問數據庫中的數據?

trans by 2019-06-06T23:49:46Z

1 2 下一頁 共2頁