1

中央値の 2 倍と 3 つの異なる入力の最小値との差を効率的に見つける LMC プログラムを作成したいと考えています。このためのアルゴリズムを理解するのに助けが必要です。

これが私がこれまでに持っているものです:

INPUT 901 - Input first
STO   399 - Store in 99 (a)
INPUT 901 - Input second
STO   398 - Store in 98 (b)
INPUT 901 - Input third
STO   397 - Store in 97 (c)
LOAD  597 - Load 97 (a) 
SUB   298 - Subtract 97 - 98 (a - b)
BRP   8xx - If value positive go to xx (if value is positive a > b else b > a)
LOAD  598 - Load 98 (b)
SUB   299 - Subtract 98 - 99 (b - c)
BRP   8xx - If value positive go to xx (if value is positive b > c else c > b)
LOAD  598 - Load 98 (b) which is the median
ADD   198 - Double to get "twice the median"

スニペットの最後で、どの入力が最小であるかがわからず、入力が既にソートされていると想定していたことに気付きました (ソートされていません)。

これを効率的に実行し、同じブランチ内の最小の入力と中央値を決定するには、何らかの方法で入力を最小から最大に並べ替える必要があると思います。

4

1 に答える 1

2

ちっぽけなコンピューター言語はわかりませんが、それは問題ではありません。それはアルゴリズムの問​​題です。

まず、3 つのパラメーターの名前を少し混乱させました (最初に 99 を a と言い、次に 97 を a と言いました)。

99、98、97 (a、b、c など) の 3 つのパラメーターをロードする必要があります。次に、99 (a) をロードし、99 (a) から 98 (b) を減算します。

結果が正の場合 (99 が 98 より大きい)、98 と 99 を交換する必要があるため、2 つの最小値は位置 99 にあります。

ここで 98 (c) をロードし、そこから 97 を引きます。結果が正の場合、97 と 98 を入れ替えて、2 つの最小値が位置 98 にあるようにします。

最後に、98 か所と 99 か所で 2 つの最小の数値が得られます。これが最小で中央値です。

99 をロードし、そこから 98 を減算します。結果が正の場合、99 に中央値が含まれ、98 に最小値が含まれます。それ以外の場合は逆になります。

これで、中央値を 2 倍にして、この数値と最小値との差を計算できます。

于 2015-11-02T12:02:21.773 に答える