2015-03-03 38 views
-2

我正在查看數據向量是否處於排名形式。那是;每個觀測值都是1和N之間的數字,其中N是觀測值的數量,但是是隨機的,未知的次序。如何檢查一個向量是否包含從1到N的無序數字序列

我能想到的最簡單的檢查是高斯和,使用(N *(N + 1))/ 2並將其與矢量和相比較。除了我的情況,我有200,000個觀測值,所有從1到200,000的數字之和大於2^32。除了獲得一臺64位計算機之外,檢查數據排名的最快方法是什麼。

+0

如果您有兩個值的差異可以互相抵消,則您的高斯總和檢查將返回誤報,例如,它將返回1,1,1,3,5,5,6(其中2減1並且4增加1)並且N = 6。 – 2015-03-03 09:59:19

+0

unique,is.integer – Khashaa 2015-03-03 10:02:25

+0

作爲之前刪除的註釋,注意到setdiff( 1:N,vector)似乎工作。雖然我不確定如何處理返回類型的整數(0)。 @FrankSchmitt它可能會返回一個誤報,但數據不太可能以接近隊列的形式出現。它將被排名或沒有。 – 2015-03-03 10:02:45

回答

0
checkForRanks <- setdiff(1:N,X) 
isRanked <- length(checkForRanks) > 0 
if(!isRanked) stop("Please rank data") 
相關問題