Произвольно генерируя 2d / 3d массив - PullRequest
0 голосов
/ 02 ноября 2010

Я думал об этом некоторое время, но что может быть хорошим способом для случайного генерирования 2-го или 3-го массива.Я не ищу конкретный код как таковой, но больше просто общую идею или способ, которым можно подумать о том, как это сделать.

edit: Извините, я ошибся, я имел в виду, что у вас есть массив (2d или 3d)заполнено пустым пространством, и я хотел случайным образом генерировать в нем символы Char * ... случайно (все остальное было бы пустым).это то, что я имел в виду.

Ответы [ 7 ]

2 голосов
/ 02 ноября 2010
  1. создать 2D / 3D массив
  2. Заполнить его случайными данными
  3. ?????
  4. Прибыль!
0 голосов
/ 02 ноября 2010

Это не точный ответ, который вы просили, но он может оказаться полезным в любом случае. Иногда, когда я хочу сгенерировать большую случайную строку, я делаю следующее: 1. создать небольшую случайную строку, скажем, 3 или 4 символа 2. получить хеш с вашим алгоритмом выбора (MD5, SHA1 и т. Д.)

Таким образом, вы можете генерировать довольно длинные «случайные» строки. Получив очень длинную случайную строку, вы можете разделить ее на более мелкие или использовать целиком. Целостность случайности основана на том, насколько случайна короткая начальная строка.

0 голосов
/ 02 ноября 2010

Если вы пытаетесь редко заполнять большой 2D-массив символами ASCII в верхнем регистре, это будет выглядеть примерно так в C:

int array[A][B];

for (int i = 0; i < SOMETHING; ++i)
{
          //Note: Modulus will not give perfect random distributions depending on 
          //the values of A/B but will be good enough for some purposes.
     int x = rand() % A;  
     int y = rand() % B;

     char ch = rand() % 26 + 'A';
     array[x][y] = ch;
}
0 голосов
/ 02 ноября 2010

Это должно работать:

int *ary,   /* Array */
    x_size, /* X size of the array */
    y_size; /* Y size of the array */

x = rand() % MAX_SIZE;
y = rand() % MAX_SIZE;

ary = malloc(sizeof(int) * (x * y));

ary[1][1] = 1;

Если индексирование [] [] не работает, возможно, вам придется использовать

*(ary + (x_size * X_COORD) + Y_COORD)

для доступа к элементу [X_COORD][Y_COORD]. Я не совсем уверен, поддерживает ли c99 этот синтаксис.

Извините, я не мог придумать, как сказать это без кода.

РЕДАКТИРОВАТЬ: Извините за путаницу - думал, что вам нужен массив случайных размеров.

0 голосов
/ 02 ноября 2010

Я знаю, что вам не нужен весь код, но на самом деле не так уж много кода.

int array[A][B][C];
std::generate_n(array[0][0], A*B*C, rand);
0 голосов
/ 02 ноября 2010

Если вы хотите, чтобы случайность имела непрерывность в 2 или 3 измерениях, вам нужна концепция "шум".

0 голосов
/ 02 ноября 2010

Просто сгенерируйте набор случайных значений, используя rand(), и сгруппируйте их в массив.

...