swing JTree,优化算法,Java
我的合作伙伴和我,我们正在努力优化频率过程
我们想要在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必须为每个包含的{
最高优先级是涉及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这部分的一些代码
# 1 楼答案
我解决了我的问题
我想改进我的所有方法,尤其是SearchNodeSamplePerValue和getOptimizedTree
我创建了一个填充方法https://pastebin.com/LvCefdc4
您可以复制、粘贴和执行
树->;非优化
treeOut->;优化