gpt4 book ai didi

javascript - 按与邻居的相似度排序的对象数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:45 25 4
gpt4 key购买 nike

我真的希望你能帮助我,我有一个对象数组,我需要一个算法或一个指向要阅读的东西的指针,以便根据它们与邻居的相似性对它们进行排序。

例如

[ 
{a:12,b: 7,c: 5},
{a: 5,b: 5,c: 5},
{a: 3,b: 3,c: 3},
{a: 5,b: 7,c: 5},
{a:12,b: 7,c: 5}
]

成为

[
{a: 5,b: 5,c: 5},
{a: 5,b: 7,c: 5},
{a:12,b: 7,c: 5},
{a:12,b: 7,c: 5},
{a: 3,b: 3,c: 3},
]

我这里有一个 REPL...

https://repl.it/@idrise/ThoseWellmadeMonitors

我用暴力破解了它,但它没有得到最好的分数,而且它在大阵列上花费了很长时间。

分数是这样计算的,分数越高越好!

function scoreArray(array) {
let score = 0;
for (let f = 1; f < array.length; f++) {
score += howSimilarAreObjects(array[f - 1], array[f]);
}
return score;
}

function howSimilarAreObjects(object1, object2) {
let score = 0;
Object.keys(object1).forEach(curValue => {
if (object1[curValue] === object2[curValue]) {
score++;
}
});
return score;
}

非常感谢任何帮助,

idris

最佳答案

您可以将每个元素相互比较并获得两个对象之间的相似性。然后取组,先得到相似度最高的对象,然后得到相似度较低的对象。通过将它们推送到结果集,按已看到的对象过滤数组。

const similar = (a, b) => Object.keys(a).filter(k => a[k] === b[k]).length;

var array = [{ a: 12, b: 7, c: 5}, { a: 5, b: 5, c: 5}, { a: 3, b: 3, c: 3}, { a: 5, b: 7, c: 5}, { a: 12, b: 7, c: 5}],
groups = {},
used = new Set,
result = [];

array.forEach((a, i) =>
array
.slice(i + 1)
.forEach(b => (s => (groups[s] = groups[s] || []).push(a, b))(similar(a, b))));

Object
.keys(groups)
.reverse()
.forEach(k => result.push(...groups[k].filter(o => !used.has(o) && used.add(o))));

console.log(result);
console.log(groups);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 按与邻居的相似度排序的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52824214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com