タイトルが長かったことをお詫びしますが、内容についての情報が欠けているので、どうやって別の書き方をするのか本当にわかりませんでした。
最近、並列アルゴリズムに関する大学の試験を受けました。1つの演習で、配列の要素(これを呼び出すとしましょうA
)が同じ回数繰り返されているかどうかを判断するアルゴリズムを作成するように求められました。
例えば:
1)A = 1 8 8 1 8 1 1 8
:答えは「はい」です。すべての数値が2回繰り返されます。
2)A = 7 8 8 5 5 4 7 8
:答えはノーです。
並列計算の特定のモデルであるPRAMのアルゴリズムを作成する必要がありました。このモデルでは、読み取り/書き込みの競合やその他の問題を回避するためにいくつかの手法を使用する必要がありましたが、これは関係ありません。私が最終的に得たのは、新しい配列でしたB
。それを次のように定義できます。Given the array A, B[i] contains the number of repetitions of the element A[i] within A.
例えば:
1) A = 1 8 8 1 8 1 1 8
B = 4 4 4 4 4 4 4 4
2)A = 7 8 8 5 5 4 7 8
B = 2 3 3 2 2 1 2 3
ご想像のとおり、残された唯一のことは、すべての要素がB
他の要素と等しいかどうかを確認することですが、それは私がマゾヒストであり、試験のプレッシャーであることがわかりました温度)が私を別の道に導きました。さらに、このコンピューティングモデルを使用して、配列の要素を比較することはすぐにはできません。
したがって、のすべての要素B
が同じであるかどうかを確認するために、それらをすべて合計し、その結果を要素の数で除算しました。結果B
がBの要素(たとえば、最初の要素)と等しい場合B[0]
、アルゴリズムはtrue
(false
それ以外の場合)。
上記の例を見てみましょう:
1)sum = 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 32
-> 32 / 8 = 4 = B[0]
->はい。
2)sum = 2 + 3 + 3 + 2 + 2 + 1 + 2 + 3 = 18
-> 18 / 8 ≠ 2 = B[0]
->いいえ。
馬鹿げていることは知っていますが、それが私が思いついたものです。
私はこのアプローチを配列/数値のさまざまな組み合わせで確認しましたが、うまくいくようです。ことは、アルゴリズムが正しいことの(数学的)証明を見つけるのに苦労していることです。私はまだ知らない試験の結果に加えて、このアプローチが正しいかどうかを示すいくつかの数学的証明/説明があるかどうかを知りたいと思っています。そのため、助けが必要です。
質問を右のStackExchangeサイトに投稿したことを望みます。そうでない場合は、適切なサイトにリダイレクトしてください。
前もって感謝します。