Мои партнеры и я, мы пытаемся оптимизировать частотный процесс ...
Что мы хотим максимально упростить для нашей проблемы за JTree
.
Как видите, у каждого node
или leaf
есть numResampleOperations
, задействованный на узел / лист.
L -> Increment or multiplication
M -> Decrement or division
Как рассчитатьзначения?
Target = Source*L/M
numResampleOperations = filterSize * Source * Integer.max(L, M);
Мы хотим получить только одно значение на частоту, отображаемое в JTextField, удаляя ненужную ветвь.
Для этого примера мы использовали только 5 упорядоченных Target
частот (толькодопустимы целые числа), но могут увеличиваться до 50 значений частоты.
JTree должен сохранять не менее один на каждую включенную Target
частоту 150 Гц, как минимум одну из 160 Гц, .., 210 Гц.
Наивысшим приоритетом является минимальная сумма numResampleOperations
Как удалить ненужные ветви (those whose sum is very high
), узлы или листья с гарантиейиметь хотя бы один (частота требуется для JTextField), но сумма всех numResampleOperations
является минимальной?
Что вы нам предлагаете?
Мы начинаем с Создание списка с комбинацией подмножеств списка, Java Но из-за размеров решение не является жизнеспособным.
РЕДАКТИРОВАТЬ 1
мой класс
public class NodeResample {
private int incrementL;
private int decrementM;
private int sampleRateSource;
private int sampleRateTarget;
private double maxPassFreq;
private Integer filterSize;
private Integer numResampleOperations;
public NodeResample(int incrementL, int decrementM, int sampleRateSource, int sampleRateTarget, double maxPassFreq, Integer filterSize, Integer numResampleOperations) {
this.incrementL = incrementL;
this.decrementM = decrementM;
this.sampleRateSource = sampleRateSource;
this.sampleRateTarget = sampleRateTarget;
this.maxPassFreq = maxPassFreq;
this.filterSize = filterSize;
this.numResampleOperations = numResampleOperations;
}
public int getIncrementL() {
return incrementL;
}
public void setIncrementL(int incrementL) {
this.incrementL = incrementL;
}
public int getDecrementM() {
return decrementM;
}
public void setDecrementM(int decrementM) {
this.decrementM = decrementM;
}
public int getSampleRateSource() {
return sampleRateSource;
}
public void setSampleRateSource(int sampleRateSource) {
this.sampleRateSource = sampleRateSource;
}
public int getSampleRateTarget() {
return sampleRateTarget;
}
public void setSampleRateTarget(int sampleRateTarget) {
this.sampleRateTarget = sampleRateTarget;
}
public double getMaxPassFreq() {
return maxPassFreq;
}
public void setMaxPassFreq(double maxPassFreq) {
this.maxPassFreq = maxPassFreq;
}
public Integer getFilterSize() {
return filterSize;
}
public void setFilterSize(Integer filterSize) {
this.filterSize = filterSize;
}
public Integer getNumResampleOperations() {
return numResampleOperations;
}
public void setNumResampleOperations(Integer numResampleOperations) {
this.numResampleOperations = numResampleOperations;
}
@Override
public String toString() {
return "NodeResample{" + "L=" + incrementL + ", M=" + decrementM
+ ", Source=" + sampleRateSource + ", Target=" + sampleRateTarget
+ ", filterSize=" + filterSize + ", numResampleOperations=" + numResampleOperations + "} ";
}
}
Теперь я заметил, что некоторые ветви необходимы, например, First (Top)
ветвь, которая включает 210
, потому что ни одна другая ветвь дерева не включает его.
Во-первых, мне нужен код, чтобы найти ветвь, которая включает это значение (200)
'или самое дешевое',Добавьте найденную ветку к другому Target JTree. Какой-то код для этой части?
Я также заметил, что другие ветви по-прежнему имеют значение 200
, однако стоимостьдобавление другой ветви больше, чем продолжение использования первой «существенной» ветви, поскольку это only adding two nodes
, сумма которой меньше, чем добавление другой ветви.
Во-вторых, яВам нужно знать значение этих two nodes numResampleOperations -> (267960 + 1091720)
, а также значения других ветвей, чтобы сделать сравнение и добавить лучший вариант в другое целевое JTree. Какой-то код для этой части?