私はプログラミングの観点から自分で物事を理解するのが好きです...だから、動的な次元を持つ多次元配列をループする方法を考えていました。(主にブルートフォースなど)
未知の次元の配列をループするために私が思いついた方法は次のとおりです。
#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 つは、事前に定義されたチャンクを作成することでしたが、数字または使用可能な文字が増加したときに処理する必要がある大量の値が大きすぎるため、通常の変数をオーバーフローさせました。
「なぜマルチスレッド ブルート フォースを作成する必要があるのか」と疑問に思う人がいるかもしれません。そして、マルチスレッドのブルート フォースを作成できるということは、迷路の解決や最適ルートの決定など、他のプロセスをマルチスレッド化できるということです。
よろしくお願いします。