[英]What is the Time Complexity, Space complexity and Algorithm for strstr() function in C++?
[英]What is the complexity of copying a variable in C++
我的一個朋友說,位掩碼比位集更好,因為復制位集需要O(N)時間,而復制位掩碼只需要O(1)時間,因此對於動態編程等應用程序來說,它要快得多。 所以我想知道所有其他數據類型是否相同?
例如,此代碼塊的復雜性是什么?
vector <int> vec1 = {1,2,3,4,5,6,7,8,9,10};
vector <int> vec2 = vec1;
如果是O(N),為什么會這樣呢? 不應該像做某件事一樣是O(1)
int x = 530210;
int y = x;
將會?
要了解操作的復雜性,首先必須定義您的計算模型。 特別是,您必須定義哪些操作是O(1)以及哪些操作是免費的。
例如,如果您正在查看需要大量硬盤訪問的程序,則只會考慮從磁盤讀取一個塊作為一項操作,而對內存的訪問則是免費的。
在位掩碼和位集的示例中,您可能正在計算內存塊復制操作。 然后,復制適合一個內存塊的位掩碼僅花費一份內存副本。 但是,在此模型中,復制位掩碼仍然為O(N),因為大的位掩碼將跨越許多存儲塊。 更准確地說,如果b是一個內存塊中的位數,而N是位掩碼中的位數,那么您需要ceil(N / b)存儲塊復制操作來復制位掩碼。
復制長度為N
的向量的方法有幾種:
O(1)
向量復制操作 O(N)
元素復制操作 O(T)
,則為O(NT)
個度量單位 順便說一句,您的朋友關於bitset
是錯誤的,否則您會誤解。 的優點bitset
是數據結構被優化以利用並行執行的低水平的形式,可以由單個線程來完成的優點-即64位整數運算可以用來在64個不同的位同時工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.