比方说,我有一个N
大小的方形boolean
grid
(二维数组)。其中一些值为true
,部分值为false
(未指定<true values>/<false values>
比率)。我想随机选择一个指标(x, y)
,以便grid[x][y]
是true
。如果我想要一个时间,有效的解决方案,我会做这样的事情(蟒蛇):布尔型网格的随机指数
x, y = random.choice([(x, y) for x in range(N) for y in range(N) if grid[x][y]])
但这是O(N^2)
,这是绰绰有余了,再多说了,一个井字棋游戏的实施,但我猜测它会为大型内存消耗更多的内存。
如果我想要的东西,这不是消耗内存的,我会做:
x, y = 0, 0
t = N - 1
while True:
x = random.randint(0, t)
y = random.randint(0, t)
if grid[x][y]:
break
但问题是,如果我有订单10^4
大小的网格,只能有一个或两个true
值它可能需要永远地“猜测”哪一个是我感兴趣的那个。我应该如何使这个算法最优化?