遍历哈希图并计算最小值并在没有剩余点时停止
Looping over a hashmap and calculate min and stop when no points left
我有一个包含(点,值)的hashmap,我计算hashmap中的最小值。其次,检索点我用它来从矩阵中提取相应的值。
然后我存储 xmmin,并在 arraylist
中检索到的点
我的objective是不考虑数组列表中已经存在的点。
我已经试过了,但它卡在了第一分钟。
这是我试过的
List<Integer> dataPoints = new ArrayList(); // Storing parsed elements including Xmin
HashMap<Integer, List<Integer>> clusters = new HashMap<>();
ArrayList<Integer> listt = new ArrayList<>();
List<Integer> l = new ArrayList<>(); //list of points for each xmin
while(E.size()!=dataPoints.size()) {
int xMin = getKey(E,MinX(E));
System.out.println("Xmin "+xMin);
if (!existsX(dataPoints, xMin)) {
dataPoints.add(xMin);
//checking id X exists in data points if no return close elements
for (int j = 0; j < S.getRow(xMin).length; j++) {
if (S.getEntry(xMin, j) > beta) {
l.add(j);
dataPoints.add(j);
}
}
}
这里是 IfExists 函数
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) != xMin) {
return false;
}
}
return true;
}
How can I achieve that
你的ifExists
应该是
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) == xMin) {
return true;
}
}
return false;
目前,您的 existsX
-方法包含:
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) != xMin) {
return false;
}
}
return true;
这将立即 return false
在第一个不是 xMin
的项目上,而你想完成相反的事情:return true
一旦发现 xMin
是这样的:
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) == xMin) { // != has been changed to ==
return true; // Return true as soon as we've found it
}
}
return false; // Return false if it wasn't found
然而,更好的方法是更多地依赖为您完成工作的内置函数。在这种情况下,您的:
if(!existsX(dataPoints,xMin))
可改为:
if(!dataPoints.contains(xMin))
所以您不需要制作自己的 existsX
方法。 Here the JavaDocs for the List#contains
builtin.
我有一个包含(点,值)的hashmap,我计算hashmap中的最小值。其次,检索点我用它来从矩阵中提取相应的值。 然后我存储 xmmin,并在 arraylist
中检索到的点我的objective是不考虑数组列表中已经存在的点。 我已经试过了,但它卡在了第一分钟。
这是我试过的
List<Integer> dataPoints = new ArrayList(); // Storing parsed elements including Xmin
HashMap<Integer, List<Integer>> clusters = new HashMap<>();
ArrayList<Integer> listt = new ArrayList<>();
List<Integer> l = new ArrayList<>(); //list of points for each xmin
while(E.size()!=dataPoints.size()) {
int xMin = getKey(E,MinX(E));
System.out.println("Xmin "+xMin);
if (!existsX(dataPoints, xMin)) {
dataPoints.add(xMin);
//checking id X exists in data points if no return close elements
for (int j = 0; j < S.getRow(xMin).length; j++) {
if (S.getEntry(xMin, j) > beta) {
l.add(j);
dataPoints.add(j);
}
}
}
这里是 IfExists 函数
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) != xMin) {
return false;
}
}
return true;
}
How can I achieve that
你的ifExists
应该是
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) == xMin) {
return true;
}
}
return false;
目前,您的 existsX
-方法包含:
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) != xMin) {
return false;
}
}
return true;
这将立即 return false
在第一个不是 xMin
的项目上,而你想完成相反的事情:return true
一旦发现 xMin
是这样的:
for (int k = 0; k < dataPoints.size(); k++) {
if (dataPoints.get(k) == xMin) { // != has been changed to ==
return true; // Return true as soon as we've found it
}
}
return false; // Return false if it wasn't found
然而,更好的方法是更多地依赖为您完成工作的内置函数。在这种情况下,您的:
if(!existsX(dataPoints,xMin))
可改为:
if(!dataPoints.contains(xMin))
所以您不需要制作自己的 existsX
方法。 Here the JavaDocs for the List#contains
builtin.