所以,我需要一些帮助来加速我的程序并提高它的效率,这样它就不会占用太多笔记本电脑无法处理的内存。首先,我正在创建一个解决sudokus的程序。您输入一个普通值(1111111111111111)然后,通过一些操作,更改一些数字,然后它开始检查数独的有效性。如果它不是合法的,它会搜索变量" y",一个类似于计数器/索引的东西,是否属于该组中的一个,并且在它的第一个中,它运行一些总和。你会看到:
tablero = 1111111111111111
g1 = range(4,4294967296,4)
g2 = range(16,4294967296,16)
g3 = range(64,4294967296,64)
g4 = range(256,4294967296,256)
g5 = range(1024,4294967296,1024)
g6 = range(4096,4294967296,4096)
g7 = range(16384,4294967296,16384)
g8 = range(65536,4294967296,65536)
g9 = range(262144,4294967296,262144)
g10 = range(1048576,4294967296,1048576)
g11 = range(4194304,4294967296,4194304)
g12 = range(16777216,4294967296,16777216)
g13 = range(67108864,4294967296,67108864)
g14 = range(268435456,4294967296,268435456)
g15 = range(1073741824,4294967296,1073741824)
g16 = range(500000,4294967296,500000)
y = 1
def nueva_conf():
global tablero
global y
if y in g15:
tablero = tablero + 700000000000000 - 33333333333333
elif y in g14:
tablero = tablero + 70000000000000 - 3333333333333
elif y in g13:
tablero = tablero + 7000000000000 - 333333333333
elif y in g12:
tablero = tablero + 700000000000 - 33333333333
elif y in g11:
tablero = tablero + 70000000000 - 3333333333
elif y in g10:
tablero = tablero + 7000000000 - 333333333
...
elif y in g3:
tablero = tablero + 700 - 33
elif y in g2:
tablero = tablero + 70 - 3
elif y in g1:
tablero = tablero + 7
else:
tablero = tablero + 1
tablero_copy = tablero
y = y+1
这是我需要改进的部分,因为它是我认为占据了我记忆的一大块。我真的不知道如何提高效率。我真的希望它以这种方式工作,操作和所有杂项。我已经在尝试另一种解决sudokus的方法,但那是我独立完成的,没有帮助的,我觉得它有可能。你觉得怎么样,Python程序员?
答案 0 :(得分:1)
不要检查数字列表,只需检查规则是否为真。这要快得多,而且可以程序化:
tablero = 1111111111111111
g_values = [500000, 1073741824, 268435456, 67108864, 16777216, 4194304, 1048576, 262144, 65536, 16384, 4096, 1024, 256, 64, 16, 4, 1]
d_values = [6666666666666667, 666666666666667, 66666666666667, 6666666666667, 666666666667, 66666666667, 6666666667, 666666667, 66666667, 6666667, 666667, 66667, 6667, 667, 67, 7, 1]
y = 1
def nueva_conf():
global tablero
global y
if y > 0 and y <= 4294967296: # required for all g ranges
for d, g, i in reversed(zip(d_values, g_values, range(17)):
if i == 0:
continue # skip g=500000
if (y % g) == 0: # check for divisibility
tablero += d # add value
break # break out of loop
tablero_copy = tablero
y += 1