2016-05-20 5 views
0

ある数の集合には、それらを異なるグループに分割して数えるためのアルゴリズムがありますか?与えられた数の集合を動的にグループ化する

何かのように:グループの

input : [1,2,3,4,5,100,200,1000,2500,3000] 
output : 1-5   : 5 
     100 -200 : 2 
     1000 - 3000 : 3 

input : [1,1,2,3,4,5,6,7,8,9,10,11,15,75,80] 
output : 1 - 15 : 13 
     75 - 80 : 2 

input : [1,100,1000] 
output : 1 : 1 
     100 : 1 
     1000 : 1 

セイ数がこれを行うことができますどのように最大10 に2最小すべきですか?

+0

の良さの基準を定義しますあなたは1から1000の数字ですか?どのように分割しますか? –

答えて

0

クラスタ化が必要です。 2.10のグループ(クラスタ)の数が限られている場合は、k-meansが適しています。

数字の値によっていくつかのメトリックが必要です(1,2,3と100,200を異なるクラスターに分割するのは簡単な違いがないため)。値の対数ですか?

+0

Kmeans以外の方法がありますか?私はこの計算をほぼリアルタイムで実行する必要があります。 – Sreejithc321

+0

はい、https://en.wikipedia.org/wiki/Cluster_analysisがたくさんありますが、kmeansは最も知られており、実装は幅広く利用できます – MBo

0

グルーピングの基準が明確に定義されていないため、求めているタスクは多少曖昧です。セット内の少なくとも二つの異なる数字がありますが、私は次のようなアプローチを提案することを考えると

  1. 番号
  2. のスパンを見つけるには、このようなスパンをカバーする10個の非overlapingビンの境界を画定します最小と最大の要素は、ビン
  3. 廃棄空のビン(最小と最大の番号が異なるビンにあるので、少なくとも2個のビンが残る)
  4. に異なるビンに
  5. グループ番号を落ちます0
  6. 残りのビンの内容を調査してレポートを印刷してください。

もちろん、あなたがそのようにして取得したグループは、多かれ少なかれ恣意的です。あなたがそのようなグループ化を回避したい場合:

input : [1,1,2,3,4,5,6,7,8,9,10,11,15,75,80] output : 1 - 8 : 9 9 - 15 : 4 75 - 80 : 2 あなたがする必要があります

  1. は、私が与えるどのような場合は、あなたのクラスタ
  2. 適したクラスタリングアルゴリズムのための外観
関連する問題