我希望在a_1<形式的java中模拟一个名为x say的大小为2n的poset。 a_2< ......< a_n和b_1< b_2< ......< B_N。
我想运行迭代来获得随机线性扩展,我可以比较每个对象的'大小',如果可以切换两个相邻位置,我会这样做,如果不是,那么我坚持,以新订单结束。例如x [i] = a_k和x [i + 1] = b_k我切换它们,但是如果x [i] = a_k且x [i + 1] = a_(k + 1)我不会。 (实质上这是Karzanov Khachiyan连锁店)。
我最初想过使用一个数组数组,其中x [] [] = {a_1 [],...,b_1 [],...},其中说a_1 = {a,1},我可以比较值并轻松切换。现在我正在尝试考虑其他方法来做到这一点,因为从我之前的问题我可以看出这不会是一种非常有效或优雅的方式来做到这一点。有没有人有任何建议?
答案 0 :(得分:3)
首先,我喜欢将整个链存储在数组中的想法。我认为这样可以正常工作。
但我同意你的看法是“嵌套”数组,
{ {'a', 1}, {'a', 2}, ... }
可能会有点烦人。你有没有考虑过像
这样的课程?class Elem {
String symbol;
int subscript;
}
然后你可以写一个比较器来说明一个Elem是否小于另一个:
Comparator<Elem> comp = new Comparator<Elem>() {
public int compareTo(Elem e1, Elem e2) {
// return -1 if e1<e2, +1 if e2<e1, 0 otherwise
}
public boolean equals(Elem e1, Elem e2) {
// ...
}
};
我认为这可能会让你的生活更轻松,因为一个元素感觉更像是一个单独的对象。