0

私は疑似コードに少し慣れていません。コードが何を言っているのかは理解できますが、ピースをまとめるのに苦労しています。このコードが何をしているかを理解するには、どのように考えればよいでしょうか。

a1、a2、.. . 、ak は k 個の数値の配列です。次のコード フラグメントは何をしますか? その理由を簡単に説明します。インデントされたすべての行がループ内にあると仮定します。

1 for p := 1 to ⌊k/2⌋
2     t := ap
3     ap := ak−p+1
4     ak−p+1 := t
4

2 に答える 2

2

Ookay、

1 for p := 1 to ⌊k/2⌋

つまり、アレイの半分まで移動します。

2 t := ap
3 ap := ak−p+1
4 ak−p+1 := t

このパターンは、「一時的なスワップ」として認識できますt。そして、何が交換されますか?

さて、apそしてak-p+1、1つpは配列の開始から-番目の要素であり、もう1つpは終了から-番目の要素です。

したがって、要約すると

n最初のn-thを、配列の半分までの最後の-番目の配列値と交換します。そしてその後?配列が逆になります。

擬似コード形式は本当に奇妙に見え、そして最も重要なことに、あいまいに見えることに注意してください。

またはとak-p+1同等a[k-p+1]ですか?そうでない場合は、他のものをどのように表現しましたか。a[k]-p+1a[k-p]+1

したがって、最初に、このコードをPythonのような実際のソースに変換します。これははるかに読みやすいものです。

編集します。

I)さて、あなたが投稿したように、配列の範囲はからa1ですak

aII)2つの変数(およびb)の値を交換する方法を考えてください。

1 temp := a
2 a    := b
3 b    := temp

もちろん、2行目で上書きaしたため、古い値を一時的に保存する必要がありました。これはです。batemp

于 2010-08-29T15:19:34.083 に答える
0

ループは、a[p]をa[k-p + 1]に変更するときに、配列をその中央要素にミラーリングします。ここで、a [p]は常に配列の「左側」にあり、a [k-p+1]です。常に「右側」にあります。tは一時変数です。

于 2010-08-29T15:13:09.580 に答える