【发布时间】:2019-05-27 03:40:29
【问题描述】:
我的合作伙伴和我,我们正在努力优化频率过程...
我们希望在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 频率为 150Hz,至少为 160Hz、..、210Hz 之一。
最高优先级是涉及numResampleOperations的最小总和
如何删除不需要的分支(those whose sum is very high)、节点或叶子,保证至少有一个(JTextField 上要求的频率),但所有numResampleOperations 的总和最小?
您对我们有什么建议?
我们从Generate List with Combination of Subset of List, 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 + "} ";
}
}
现在,我注意到某些分支是必不可少的,例如包含 210 的 First (Top) 分支,因为树的其他分支不包含它。
首先,我需要一个代码来找到包含该值(200)'或最便宜'的分支。将找到的分支添加到另一个目标 JTree。
这部分的一些代码?
我还注意到其他分支仍然具有200 的值,但是添加另一个分支的成本比继续使用第一个“必要”分支要大,因为这是only adding two nodes,其总和小于添加另一个分支。
其次,我需要知道这些two nodes numResampleOperations -> (267960 + 1091720) 的值以及另一个分支的值,以便进行比较并将最佳选项添加到另一个目标JTree。 一些代码这部分?
【问题讨论】: