2012-10-16 65 views
0

我試圖找到一種有效的方式來比較給定的數組,代表客戶端的服務質量與兩個Web服務的QOS,並拿起最相似的給定的QOS。比較數組之間的相似性

int[] arrayCompare(int[] clientQOS){ 

     int[] service1QOS=new int[]{3,1,4}; 
     int[] service2QOS=new int[]{1,3,3}; 

     //I want to compare clientQOS  with S1 QOS  and S2 QOS 

     return mostSimilarArray 
    } 
+4

定義「相似」 – Steven

+0

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Sujay

+0

客戶端QOS值可以從0-5變化它可以像(3,5,2)那樣沒有加權值。 –

回答

1

通過源數組爲每個目標循環,增量計數器的增量(值之間的正差)。最小的三角總和是最接近的匹配。

注意事項

,如果你認爲數字更接近更相似,不同的價值觀之間的規模相等,這應該是真實的。

+0

不錯,我認爲這應該工作得很好:)我不需要更復雜的東西,因爲我可以使用小型數據庫來給我最類似的WebService給出一個客戶端QOS –

+0

你描述的方法叫曼哈頓距離:)謝謝你提醒我 –

1

我會做一個自定義的對象,而不是數組和實現接口Comparable。這樣你就可以封裝比較算法,並在以後的其他地方重用它。

+0

當你說比較算法嗎?這不是我在尋找的第一個地方嗎? –

+0

你是對的。首先你需要封裝它。你可以遵循TDD實踐並創建一個「明顯的實現」。顯而易見的實現示例:兩個數組中數量相似的數字。只要你的問題可以有幾個正確的答案,封裝就可以允許在一個JVM的邊界中一起使用多種啓發式方法。 – Antonio

+0

我認爲這種方法對於比帶有整數的數組更復雜的對象來說非常棒,但我認爲我瞭解「幾個正確的答案」的觀點非常感謝 –