0

私は、a_1 <a_2 <... <a_n、およびb_1 <b_2<...<b_nの形式のJavaでサイズ2nのxsayと呼ばれる半順序集合をシミュレートしようとしています。

反復を実行してランダムな線形拡大を取得し、各オブジェクトの「サイズ」を比較します。2つの隣接する位置を切り替えることができる場合は、切り替えます。そうでない場合は、新しい順序で終了します。たとえば、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}の配列の配列を使用することを考えました。ここで、値を比較できます。簡単に切り替えることができます。今、私はこれを行う他の方法を考えようとしています。以前の質問から、これは特に効率的またはエレガントな方法ではないことがわかります。誰か提案はありますか?

4

1 に答える 1

3

まず、チェーン全体を配列に格納するというあなたのアイデアが好きです。私はそれがうまくいくと思います。

しかし、私はあなたに同意します、「ネストされた」配列、

{ {'a', 1}, {'a', 2}, ... }

おそらく少し面倒になります。次のようなクラスを作ることを考えましたか

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) {
        // ...
    }
};

1つの要素が単一のオブジェクトのように感じられるので、それはあなたの生活を楽にするかもしれないと思います。

于 2011-06-25T16:27:22.363 に答える