クラスター内の変動が最小化されるように、整数の入力配列から整数のクラスターを導出する必要があります。(配列内の整数またはデータ値は、都市間を走る 16 台の車のガス使用量に対応しています。最後に、データ値のクラスターに基づいて、16 台の車から 4 つのクラスターを導き出します。)
制約: 要素の数は常に 16 です。クラスターの数は 4 で、クラスターのサイズは 4 です。
私が計画している簡単な方法の 1 つは、入力配列を並べ替えてから、以下に示すように 4 つのグループに分割することです。k-means クラスタリングも使えると思います。
しかし、私が行き詰まった場所は次のとおりです。配列内のデータは時間の経過とともに変化します。基本的に、1 秒ごとにアレイを監視し、それらを再グループ化/再クラスター化して、クラスター内の変動が最小限になるようにする必要があります。さらに、上記の制約を満たす必要があります。このために、私が得ている 1 つのアイデアは、平均と変動に基づいて 2 つのグループを選択し、グループ間でデータ値を移動して、グループ内の変動を最小限に抑えることです。ただし、グループ間で移動するデータ値を選択する方法と、それらのグループを選択する方法についてはわかりません。毎秒NlogNを余裕がないため、毎秒配列にソートを適用することはできません。簡単な解決策を導き出すことができれば幸いです。
sorted `input array: (12 14 16 16 18 19 20 21 24 26 27 29 29 30 31 32)`
cluster-1: (12 14 16 16)
cluster-2: (18 19 20 21)
cluster-3: (24 26 27 29)
cluster-4: (29 30 31 32)