![](/img/trans.png)
[英]O(n) algorithm to find the odd-number-out in array of consecutive integers from 1 to n(not odd numbers)
[英]How to find the "odd one out" in a list of numbers
我有一個數字數組 [x1、x2、x3 等],其大小超過 20 個元素,我正在嘗試組合一個算法,根據它們相對於其余元素的“奇數”對元素進行排序列表。
給定一些閾值 T1,我將“奇數”定義為與重心的距離。 重心是值傾向於集中的地方,可能給定某個第二閾值 T2。
例子: [20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 20, 20, 21, 31, 24, 20, 20, 21, 31, 24] 和 T1=10 重心為大約 24,只有奇數一個是 70
這種情況是微不足道的,因為熟悉的“與均值或中值的距離”度量將執行例如。 d(70)=|24-70|=46>10=T1 和 d(31)=|24-31|=7<10=T1
我不太清楚如何處理具有 2 個或更多重心的更一般情況。
例二: [20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 120, 120, 121, 131, 124, 120, 120, 121, 131, 124] 現在有兩個1ys =24 和 d2=124 唯一的奇數仍然是 70
但是之前的指標會破裂。 也許困難的部分是找出哪些是重心。
注意:我正在尋找一種快速算法而不是准確的算法
聽起來您要解決的一般問題是:盡可能少地繪制半徑為 R 的圓,以使所有輸入至少被一個圓覆蓋; 然后,找到包含少於 k 個輸入的圓圈。
在第一種情況下,您繪制了兩個半徑為 10 的圓:第一個包含除 70 之外的所有輸入,第二個僅包含 70。檢測異常圓的標准應該捕獲包含 70 的圓,這應該很簡單。 在第二種情況下,您繪制了三個半徑為 10 的圓。 再次,僅以 70 分捕獲的標准應該很容易說明。
如果我打算從頭開始執行此操作而不查找問題的名稱(這可能是一個眾所周知的問題,並且具有良好的知名解決方案),我將從對輸入進行排序開始,這可能會非常有幫助,因為這是一維問題。 接下來,我可能會在輸入上運行一個大小為 2R 的滑動窗口,並計算每個潛在重心的移動頻率(跳過重復項和跳躍間隙),分別保存這個頻率序列。 然后,我會首先以盡可能不重疊的方式在頻率最高的位置貪婪地放置窗口,直到所有輸入都被覆蓋。 然后,我會識別出任何被圓圈覆蓋的輸入,這些圓圈的移動頻率小於與所選窗口的平均移動頻率相關的某個截止頻率; 例如,與所有圓圈覆蓋的平均值相比,將覆蓋一半或更少輸入的圓圈覆蓋的所有輸入視為異常。
例子:
INPUT: 20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 20, 20, 21, 31, 24, 20, 20, 21, 31, 24
SORTED: 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 24, 24, 24, 24, 31, 31, 31, 31, 70
WINDOW MOVING FREQUENCY:
20: 15
21: 19
(detects gap, jumps)
60: 1
(detects gap, jumps, ends)
WINDOW #1: [11,31]: 19
WINDOW #2: [50, 70]: 1
AVERAGE: 10
50% AVERAGE: 5
WINDOW #1 OVER CUTOFF
WINDOW #2 UNDER CUTOFF
例子:
INPUT: 20, 20, 21, 31, 24, 20, 70, 21, 31, 24, 120, 120, 121, 131, 124, 120, 120, 121, 131, 124
SORTED: 20, 20, 20, 21, 21, 24, 24, 31, 31, 70, 120, 120, 120, 120, 121, 121, 124, 124, 131, 131
WINDOW MOVING FREQUENCY:
20: 7
(detects gap, jumps)
60: 1
(detects gap, jumps)
110: 4
111: 6
(detects gap, jumps)
114: 8
(detects gap, jumps)
121: 10
WINDOW #1: [111, 131]: 10
WINDOW #2: [10, 30]: 7
WINDOW #3: [50, 70]: 1
AVERAGE: 6
50% AVERAGE: 3
WINDOW #1 ABOVE CUTOFF
WINDOW #2 ABOVE CUTOFF
WINDOW #3 BELOW CUTOFF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.