2

java.util.Comparator を使用してSSTFアルゴリズムに取り組んでいます
これは私がこれまでに持っているものです:

private int nextHeadPosition;

public SSTF(int currentHeadPosition) {
    nextHeadPosition = currentHeadPosition;
}

@Override
public int compare(DiskRequest r1, DiskRequest r2) {         
    if (nextHeadPosition - r1.getTrackNumber()  < nextHeadPosition -  r2.getTrackNumber()) {
        nextHeadPosition = r1.getTrackNumber();
        return -1;
    } else if (nextHeadPosition - r1.getTrackNumber() > nextHeadPosition - r2.getTrackNumber()) {
         nextHeadPosition = r2.getTrackNumber();
        return 1;
    } else {
        return 0;
    }
}

初期の頭の位置が 50 の場合、次の順序が生成されます。

[100, 99, 50, 45, 44, 1]

私が生成しようとしている出力:

[50, 45, 44, 1, 99, 100]

これはコンパレータでは不可能かもしれません


編集

SSTF

トラック番号を持つリクエストのキューの場合、サービスされる最初のリクエストは、ヘッドの現在の位置に最も近いトラックになります。後続の各リクエストは、最後のリクエストの位置からの距離が最も短い順に並べられます。

したがって、トラックが[100, 99, 50, 45, 44, 1]あり、現在のヘッド位置が 50 のキューの場合、最初のリクエストは 50 になります。次は 50 に最も近いトラック、この場合は 45 になります。泡立ててすすぎを繰り返します。

4

2 に答える 2

1

問題の行は

 if (nextHeadPosition - r1.getTrackNumber()  < nextHeadPosition -  r2.getTrackNumber()) {

nextHeadPosition =50

r1.getTrackNumber()=99

r2.getTrackNumber()=45

if((50-99) < (50-45))に変換しますif(-44< 5)

使用Math.absは 1 つのソリューションです。また、提供されたコードを使用しているコードを見せていただければ...助けていただけると助かります。

于 2013-04-26T16:06:37.737 に答える