如何提高在Python3中创建真正大的组并搜索它们的速度

2024-09-29 09:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我需要一些帮助来加速我的程序,提高效率,这样就不会占用笔记本电脑无法处理的太多内存。首先,我正在创建一个程序来解决数独问题。输入一个普通值(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

这是我需要改进的部分,因为我认为这会消耗我很大一部分的记忆。我真的不知道如何使它更有效率。我真的希望它能以这种方式工作,包括各种各样的操作。我已经在研究另一种解决数独问题的方法了,但这是我自己做的,没有帮助,我觉得有可能。你觉得呢,Python程序员?你知道吗


Tags: in程序rangeglobalelifg1g2g3
1条回答
网友
1楼 · 发布于 2024-09-29 09:32:43

与其检查数字列表,不如检查规则是否正确。这要快得多,而且可以程序化:

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

相关问题 更多 >