0

私はプログラミングの観点から自分で物事を理解するのが好きです...だから、動的な次元を持つ多次元配列をループする方法を考えていました。(主にブルートフォースなど)

未知の次元の配列をループするために私が思いついた方法は次のとおりです。

#include <stdio.h>
#include <stdlib.h>

/* a simple example of the method I'm using */
void func(int *v,char *usable,int len,int D,int d)
{
  for(v[d] = 0; v[d] < len; v[d]++)
  {
    if(d+1 < D)
      func(v,len,D,d+1);
    else
    {
      for(int i = 0; i < D; i++)
        printf("%c",usable[v[i]]);
      printf("\r");
    }
  }
}
int main()
{
  int *v,z,min = 4,max = 6;
  for(z = min; z <= max; z++)
  {
    v = malloc(sizeof(int)*z);
    func(v,"0123456789",10,z,0);
    printf("\n");
    free(v);
  }
  return 0;
}

これは素晴らしいエレガントなソリューションだと思いますが、プロセスをマルチスレッド化することを考えると、さらに多くの問題が発生しました。私が発見していないこのタイプのプロセスの代替ソリューションと、このようなプロセスをマルチスレッド化する可能な方法を知りたいです。私が試した方法の 1 つは、事前に定義されたチャンクを作成することでしたが、数字または使用可能な文字が増加したときに処理する必要がある大量の値が大きすぎるため、通常の変数をオーバーフローさせました。

「なぜマルチスレッド ブルート フォースを作成する必要があるのか​​」と疑問に思う人がいるかもしれません。そして、マルチスレッドのブルート フォースを作成できるということは、迷路の解決や最適ルートの決定など、他のプロセスをマルチスレッド化できるということです。

よろしくお願いします。

4

1 に答える 1

0

あなたがあなたのコードで何をしようとしているのか、私はまだ混乱しています。しかし、あなたの説明から。あなたは、「動的な次元を持つ多次元配列をループする方法」を開発しようとしていると言いました。

私にとって、そのステートメントは、n次元の配列をループしたいと言っています。したがって、配列[n]をループするか、配列[n][m]をループするなど、任意の数の次元と長さについてループします。これはあなたがやろうとしていることですか?その場合は、テンプレート化された関数を使用して n 次元配列をループするだけです。

于 2012-11-08T03:52:54.137 に答える