1

一連の数値をどのように分割してシーケンスにできますか? そして、一般的な用語を見つけますか?

1 - 番号は常に順番に並んでいます

2 - n 個の数字がある場合、n/2 個の数字が常に存在する

たとえば、次のようなものがあります。

Input: 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
Output--> 2*X, x=[0..15]

また

Input: 0,2,4,5,6,8,10,12,14,15,16,18,20,22,24,26,28,30

2セットに分ける

A: 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30

B: 5,10,15,20

Output--> 2*X, x=[0..15] AND 5*X, x=[1..4]

これは非常に難しいと思いますが、何かコメントはありますか?

どのコンピュータ分野またはアルゴリズムが役に立ちますか?

4

1 に答える 1

0

私が理解している問題は次のとおりです。数列が与えられた場合、ゼロから始まり、この集合をカバーする定数の倍数で増加する数列の集合を見つけます。

これが私がすることの一般的な概要です:

セット内のすべての番号のリストを作成し、最初の2つの要素から繰り返して、ここにある基準を満たすすべての可能なセットを生成します。リスト内の要素に遭遇した場合、その数が定数の倍数であるリストは以前に遭遇したリストのサブセットであるため、生成番号としての考慮から除外できます。完了すると、そのセットをカバーするために使用できる可能なセットのリストが表示されます。例えば:

0、2、4、5、6、8、10、12、14、15、16、18、20、22、24、26、28、30

0と2から始めます。連続して2大きい要素を探し、それらを可能な倍数と見なされる要素のリストから削除します。このリストにない2の倍数が見つかったら、生成を停止します。どうぞ:

s(2) = [0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]

葉:

[5,15] 

2つの潜在的な他の候補として。2で割り切れる要素、たとえば4のいずれかがそのリストのサブセットを作成するため、考慮する必要がないことがわかりますか?

セット内の残りのリストは0から始まり、最小の要素である5ずつ増加します。

[0,5,10,15,20]

(これらの倍数の元のリストをチェックしており、切り捨てられたリストではないことを忘れないでください。切り捨てられたリストは残りの候補のリストのみです。候補リストが空の場合、このセットに含まれるすべてのセットが見つかります。スーパーセットを持っていない人。

より複雑な例の場合:

[0 2 3 4 5 6 7 8 9 10 12 13 14 15]

まず始めます:

[0 2 4 6 8 10 12 14]

葉[357 9 13 15]

候補として、それは順番に生成します:

[0 3 6 9 12 15]

[5 7 13]

を生成します

[0 5 10 15]

[7 13]

を生成します

[0 7 14]

[13]

を生成します

[0 13].

セットの合計の組み合わせは次のとおりです。

[0 2 4 6 8 10 12 14]
[0 3 6 9 12 15]
[0 5 10 15]
[0 7 14]
[0 13].

この時点で、セットをカバーするために必要なすべてのセットの最小リストがあります。ここから適切な[0,1...n] / a*n記述子を生成するのは簡単なはずです。

于 2013-02-15T17:28:53.750 に答える