제 대학 과정에서 무작위 순차 흡착이라는 과정을 시뮬레이션하고 있습니다. 내가해야하는 일 중 하나는 무작위로 격자에 겹치지 않는 사각형을 무작위로 쌓아 놓고 더 이상 공간이 남아 있지 않을 때까지 평균 '방해 전파'범위를 찾는 과정을 여러 번 반복하는 것입니다.가능한 경우 C에서 2 비트 숫자를 정의하는 방법은 무엇입니까?
기본적으로 나는 3 개의 가능한 값인 0, 1 및 2가있는 큰 정수 배열에 연산을 수행하고 있습니다. '0'으로 표시된 사이트는 비어 있으며 '1'로 표시된 사이트는 꽉 찼습니다. 처음 배열은 다음과 같이 정의된다 :
int i, j;
int n = 1000000000;
int array[n][n];
for(j = 0; j < n; j++)
{
for(i = 0; i < n; i++)
{
array[i][j] = 0;
}
}
내가 사각형이 '1의로 표현되도록 (즉 겹칠 수 없습니다) 배열에 무작위로 5 개 * 5 사각형을 입금하고 싶은 말은. 이것은 무작위로 x와 y 좌표를 선택한 다음 그 점에서 시작하는 사각형의 topleft 점으로 '5'* 5 제곱을 만드는 것입니다. 그러면 광장 근처에있는 사이트를 '2'라고 표시합니다. 이들은 해당 사이트에서 정사각형을 입금하면 기존 정사각형과 겹칠 수 있기 때문에 사용할 수없는 사이트를 나타냅니다. 이 과정은 어레이에 정사각형을 놓을 여지가 없어 질 때까지 계속됩니다 (기본적으로 어레이에 0이 더 이상 남아 있지 않습니다).
어쨌든, 요점은. 비트 연산을 사용하여 가능한 한 효율적으로이 프로세스를 만들고 싶습니다. 내가 사각형 근처에 사이트를 표시 할 필요가 없다면 이것은 쉽습니다. 나는 '2'로 표시된 사이트를 설명 할 수 있도록 2 비트 숫자를 생성 할 수 있는지 궁금합니다.
죄송합니다. 정말 복잡한 것처럼 들리면, 왜 내가 이것을하고 싶은지 설명하고 싶었습니다.
아마도 2 비트를 사용하더라도 배열을 저장하기 위해 약 250,000 개의 대형 하드 디스크가 필요하다는 것을 알고 있습니까? 배열의 한 영역에서 어떤 일이 발생했는지는 다른 영역에 영향을 미치지 않으므로 그러한 대규모로 시뮬레이션을 수행하는 몇 개의 사각형 이상은 아무런 의미가 없으며 상당히 작은 배열을 사용하여 학습하는 것 이상을 의미하지는 않습니다. – Dipstick
예, 그 페타 바이트 범위가 아닙니까? 심지어 삼중 픽셀 당 2 비트를 사용한다고해도 '낭비'가됩니다. 삼중 픽셀이 64 비트 정수 또는 무언가와 같은 바이너리 유형으로 "포장"되는 일종의 시스템을 구축하는 것이 가능할 수 있습니다. 처음 6 개의 이진수 000001010011100101은 18 비트를 취합니다. 첫 번째 6 진수 00,01,02,10,11,12는 각 '자릿수'가 2 비트 인 경우 24 비트를 사용합니다. 하지만 너무 느릴 수 있습니다? 이것은 90 년대 PC에서의 어셈블리 프로그래밍에 관한 오래된 Michael Abrash 책을 상기시켜줍니다. –