我想寫C約翰康威的生命遊戲,但我在添加活細胞到板上時遇到了麻煩。我寫的處理它的功能非常慢。思考過程:我想隨機添加n個活細胞到板子上,所以當細胞離開設置活着時,得到一個隨機的(x,y)對,如果它已經死了,就讓它活着。這樣我可以保證n個細胞活着。我可以加快這個功能嗎?
我對這個問題的理解不正確,還是我只是低效?爲什麼這麼慢,我怎樣才能讓它更快?
void add_cells(int board[BOARD_WIDTH][BOARD_HEIGHT], int n)
{
// Randomly set n dead cells to live state.
while (n)
{
int randX = rand() % BOARD_WIDTH;
int randY = rand() % BOARD_HEIGHT;
if(board[randX][randY] == 0)
{
board[randX][randY] = 1;
n--;
}
}
}
這是O(n),應該在負擔得起的時間內完成。 n有多大? –
另請參閱https://stackoverflow.com/questions/40485/optimizing-conways-game-of-life –
如果讓我們說70%的細胞還活着,那麼這意味着您的代碼將不得不尋找其他細胞7次10個,這使得不必要的重複。如果您將單元格從「剩餘單元格」數組中取出時將其設置爲活動狀態,會發生什麼情況? –