Как найти возможные комбинации из 3 значений, учитывая их максимумы?

#algorithm

#алгоритм

Вопрос:

Учитывая 3 максимальных значения (m1 m2 m3), я пытаюсь найти максимально возможную комбинацию из n объектов с одинаковыми значениями (m1, m2, m3), чтобы удовлетворить заданным максимумам. Если существует несколько решений, можно выбрать первое, и для решения можно использовать несколько экземпляров объекта.

Примером ввода может быть что-то вроде:

 [A: {m1: 20, m2: 15, m3: 10}, B: {m1: 10, m2: 12, m3: 10}, C: {m1: 15, m2: 10,: m3: 30}]
  

Так, например, когда (m1 = 30, m2 = 17, m3 = 20) возможным решением будет [A, B]

Я изучал проблему с рюкзаком, и это варианты (например, с несколькими рюкзаками), однако после некоторых попыток я не могу понять, как изменить его, чтобы иметь несколько значений, которые можно поместить в несколько рюкзаков. Я на правильном пути? Или есть другой алгоритм, лучше подходящий для этой проблемы, который можно использовать / модифицировать? Спасибо

Комментарии:

1. Как здесь определяется «близость» 2 кортежей?

2. итак, что означает «близко к»?

3. Я, вероятно, буду считать m1 m2 m3 как x, y, z и использовать расстояние между двумя точками в формуле трехмерного пространства и выбирать минимальные результаты.

Ответ №1:

 let space = { 'A':{m1: 20, m2: 15, m3: 10}, 'B': {m1: 10, m2: 12, m3: 10}, 'C': {m1: 15, m2: 10, m3: 30}} 
let inp = {m1: 30, m2: 17, m3: 20}

Object.keys(space).forEach(key => {
  console.log(key   ' - '    JSON.stringify(space[key])  '- distance: '  distance(inp, space[key])) 
})

function distance(A,B){
  return Math.sqrt(Math.pow(A.m1 - B.m1,2)   Math.pow(A.m2 - B.m2,2)   Math.pow(A.m3 - B.m3,2))
}
  

Я попробовал простую реализацию на javascript. A и C более близки в трехмерном пространстве. что вы подразумеваете под закрытием?