有一种称为Cayley-Menger行列式的方法,以便找出3个点是共线的,4个点是共面的,只要给出所有的成对距离.
然而,在二维中,有一种非常简单的方法来确定3点,{A,B,C}是否共线:三角不等式!
!(|AB| + |AC| = |BC|)
和 !(|AB| + |BC| = |AC|)
与 !(|AC| + |BC| = |AB|)
IFF A
,B
,C
不共线
3-D中是否有类似的方法?
我已经实现了一个图表.我想根据它们的度数对给定的顶点子集进行排序.因此,我写了一个名为的自定义比较器DegreeComparator
.
private class DegreeComparator implements Comparator<Integer>
{
@Override
public int compare(Integer arg0, Integer arg1)
{
if(adj[arg1].size() == adj[arg0].size()) return arg1 - arg0;
else return adj[arg1].size() - adj[arg0].size());
}
}
Run Code Online (Sandbox Code Playgroud)
那么,下面哪一个更有效率?
运用 TreeSet
public Collection<Integer> sort(Collection<Integer> unsorted)
{
Set<Integer> sorted = new TreeSet<Integer>(new DegreeComparator());
sorted.addAll(unsorted);
return sorted;
}
Run Code Online (Sandbox Code Playgroud)
运用 ArrayList
Collections.sort(unsorted, new DegreeComparator());
Run Code Online (Sandbox Code Playgroud)
请注意,第二种方法不是函数,而是单行代码.
直观地说,我宁愿选择第二个.但我不确定它是否更有效率.
我想定义一个自定义边
public class Connection extends DefaultWeightedEdge
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用时,super()
这可能吗?创建图形时应为EdgeFactory使用什么?
new SimpleWeightedGraph<Sensor, Connection>(EdgeFactory.class);
Run Code Online (Sandbox Code Playgroud)
这样就足够了吗?还是我应该创建一个新的扩展类EdgeFactory
?
考虑以下课程:
class Foo
{
private class Bar
{
int operatedNumber;
Bar(int x, int y)
{
operatedNumber = operate(x,y);
}
int operate(int x)
{
return x*2;
}
}
public int operate(int x, int y)
{
return x+y;
}
public Foo()
{
Bar b = new Bar(3,5);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到编译时错误 The method operate() is not applicable for the arguments (int, int).
有没有办法调用第二个operate()
功能?
这是我正在运行的代码:
#include <iostream>
using namespace std;
int main()
{
int x = 5;
int *p;
p = &x;
*p++;
cout<<x<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出应该是6,因为p
它指的是地址x
.但是,我得到5.
但更有趣的是,我不明白为什么输出是6当我改变*p++
用*p = *p+1
.为什么是这样?