シナリオ:
4 つの負荷 (a1 a2 a3 a4) を持つアレイがある場合
a=[a1 a2 a3 a4] (locations of these loads must be fixed)
a=[1 2 3 3]
配列内のすべての値を 3 に増やしてみたいと思います。
注 : 配列a
は固定されておらず、次のいずれかの値を持つことができます。0:3
制約 :
- 違反できない優先配列がある
- 合計増分数は 3 に制限されています
与えられた:
優先度配列v=[1 3 2 1]
-- (1 が最高の優先度、3 が最低の優先度)。
注:配列v
は固定されておらず、からの任意の値を持つことができます0:3
この優先度配列を使用する:
a(1,1)=highest priority
a(1,4)=2nd highest priority
a(1,3)=3rd priority
a(1,2)=lowest priority
実装、擬似コードでの試行:
a=[1 2 3 3]
v=[1 3 2 1]
count=3
Check highest priority : a(1,1)
increment by 1
decrement count by 1
count = 2
still less than 3 ? if yes, then increment again until a(1,1)<= 3 AND count >=0
Change highest priority to 5 (so that min(v) will not pick it up)
ans : a=[3 2 3 3] ; v=[5 2 3 3] ; count = 1
Check highest priority : a(1,3)
value >= 3
Change highest priority to 5 (so that min(v) will not pick it up)
skip
ans : a=[3 2 3 3] ; v=[5 2 5 3] ; count = 1
Check highest priority : a(1,4)
value >=3
Change highest priority to 5 (so that min(v) will not pick it up)
skip
ans : a=[3 2 3 3] ; v=[5 2 5 5] ; count = 1
Check highest priority : a(1,2)
increment by 1
decrement count by 1
count = 0
still less than 3 ? if yes, then increment again until a(1,1)<= 3 AND count >=0
Change highest priority to 5 (so that min(v) will not pick it up)
ans = [a1 a2 a3 a4] = [3 3 3 3]
注 : 優先値 = [1 1 1 1] に達した場合a
、左から右に優先順位が付けられます (これを行うより良い方法は見つかりませんでした)。
これが理にかなっており、私の疑似コードが私が実装しようとしていることを示していることを願っています。不明な点があれば質問してください。