Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java偏序集模拟_Java_Poset - Fatal编程技术网

Java偏序集模拟

Java偏序集模拟,java,poset,Java,Poset,我希望在java中模拟一个名为x的偏序集,大小为2n,形式为a_1

我希望在java中模拟一个名为x的偏序集,大小为2n,形式为a_1 我想运行一个迭代来得到一个随机的线性扩展,通过这个扩展,我比较每个对象的“大小”,如果两个相邻的位置可以切换,我就这样做,如果不切换,我就坚持,以一个新的顺序结束。例如x[i]=a_k和x[i+1]=b_k我切换它们,但是如果x[i]=a_k和x[i+1]=a_(k+1),我不会切换它们。(本质上,这就是卡尔扎诺夫-哈奇扬链)


我最初考虑使用一个数组,其中x[][]={a_1[],…,b_1[],…},其中a_1={a,1},在这里我可以比较值并轻松地进行切换。现在我正在尝试其他方法来实现这一点,从我之前的问题中我可以看出,这不是一种特别有效或优雅的实现方式。有人有什么建议吗?

首先,我喜欢你将整个链存储在一个数组中的想法。我想那会很好的

但是我同意你的观点,嵌套数组

可能会有点烦人。你有没有想过把一门课改成这样

class Elem {
    String symbol;
    int subscript;
}
然后,您可以编写一个比较器来说明一个元素是否小于另一个元素:

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) {
        // ...
    }
};
比较器comp=新比较器(){ 公共内部比较(要素e1、要素e2){
//如果e1返回-1首先,我喜欢你将整个链存储在一个数组中的想法。我认为这会很好

但是我同意你的观点,嵌套数组

可能会有点烦人。你有没有想过要上这样的课

class Elem {
    String symbol;
    int subscript;
}
然后,您可以编写一个比较器来说明一个元素是否小于另一个元素:

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) {
        // ...
    }
};
比较器comp=新比较器(){ 公共内部比较(要素e1、要素e2){
//返回-1如果e1谢谢提示。我创建了一个名为ELement()的类,它似乎也很有效。我喜欢我认为我将使用的比较器思想。谢谢提示。我创建了一个名为ELement()的类,它似乎也很有效。我喜欢我认为我将使用的比较器思想。