簡體   English   中英

如何計算半隨機整數數組中的“預期”反轉次數?

[英]How to calculate “expected” number of inversions in a semi-random array of integers?

考慮一個整數數組a。 如果i <j且A [i]> A [j],則對(i,j)在A中稱為反轉。

對於陣列中的每個位置“i”,存在兩個可能的候選:具有概率p [i]的a [i]和具有概率1-p [i]的a [i] + x。

現在我必須計算預期的反轉次數。 給定每個索引i和整數x的[i]和p [i]。

我知道O(n ^ 2)方法(檢查每個合法可能的對)。 此外,我知道O(nlogn)方法來計算數組中的反轉次數,其中所有元素都以100%的概率預先確定。 它是通過修改合並排序來完成的。

我想知道比n平方更好的方法。 請告訴我。

這可以通過對用於計數反演的基於標准合並排序的算法的簡單修改來完成,其中我們為每個值分配權重並計算對於i<jA[i]>A[j] W[i]*W[j]W[i]*W[j]A[i]>A[j] (當每個權重為1時,我們得到正常計數)。 我們將這些元素的權重之和乘以我們正在處理的右數組中元素的權重,而不是將剩余的元素數添加到計數中。

要使用此算法來解決提出的問題,只需創建一個大小為兩倍的數組,其中原始數組中的每個元素都由兩個元素(按排序順序)替換,權重由概率給出。

我留下了一個解釋這個問題的評論,但如果你只是使用一點點數學,你就可以對其進行O(1)計算。 我會省去你的工作,但是,根據我的計算,n個整數數組中預期的反轉次數是((n ^ 2) - (n))/ 4.對不起,括號中有很多,我只是想要確保完全清楚。 如果你願意,我可以發布你的工作,但我想如果你只是需要答案,我會把它留下來。

所以,盡管我的評論說,我記得錯了。 這不是lg(n)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM