Python 优化四态数据结构
我正在处理同一数据结构的多个实例,这些实例可以有四种状态之一。目前,我使用Python 优化四态数据结构,python,Python,我正在处理同一数据结构的多个实例,这些实例可以有四种状态之一。目前,我使用True/False对实现状态: (True, True) (True, False) (False, True) (False, False) 对于这些数据结构,我反复应用两个函数f,g,其中 g((True, True)) = (True, False) g((True, False)) = (True, True) g((False, True)) = (False, False) g((False, False)
True
/False
对实现状态:
(True, True)
(True, False)
(False, True)
(False, False)
对于这些数据结构,我反复应用两个函数f
,g
,其中
g((True, True)) = (True, False)
g((True, False)) = (True, True)
g((False, True)) = (False, False)
g((False, False)) = (False, True)
及
我可以改进这两个函数的数据结构吗?(我想优化速度。)用于操作这些状态的代码对性能的影响要比存储状态的方式大得多。您需要如何操作它将决定存储它的最佳方式。如果不了解有关算法的更多信息,就不可能对数据表示进行评论
状态是自然地表示为两个布尔值,还是表示为四个不同的状态?用于操作这些状态的代码对性能的影响要比存储状态的方式大得多。您需要如何操作它将决定存储它的最佳方式。如果不了解有关算法的更多信息,就不可能对数据表示进行评论
状态是自然地表示为两个布尔值还是四个不同的状态?您可以使用四叉树和四键来存储状态。当您需要快速查找和查找子树时,查询将更加有效。您可以进一步查看四叉树并使用怪兽曲线。怪物曲线完全填满了一个空间,但它仍然是一条曲线。将状态沿该曲线放置,可以将其按二维排序,将其减少到一维。这就像有一个层次集群。最著名的怪物曲线是希尔伯特曲线 您可以使用四叉树和四键来存储状态。当您需要快速查找和查找子树时,查询将更加有效。您可以进一步查看四叉树并使用怪兽曲线。怪物曲线完全填满了一个空间,但它仍然是一条曲线。将状态沿该曲线放置,可以将其按二维排序,将其减少到一维。这就像有一个层次集群。最著名的怪物曲线是希尔伯特曲线 使用0..3范围内的整数,并使用位算术实现状态转换(
g
1的异或;f
3的异或)。使用0..3范围内的整数,并使用位算术实现状态转换(g
1的异或;f
3的异或).使用每个状态的符号表示实现状态:
(True, True) == 3 decimal or 11 binary
(True, False) == 2 decimal or 10 binary
(False, True) == 1 decimal or 01 binary
(False, False) == 0 decimal or 00 binary
这里是函数f和g
g((True, True)) = (True, False)
is the same as
g(3) == 2 decimal
or
XOR with 01 binary operation
g((True, False)) = (True, True)
is the same as
g(2) == 3
or
XOR with 01 binary operation
g((False, True)) = (False, False)
is the same as
g(1) == 0
or
XOR with 01 binary operation
g((False, False)) = (False, True)
is the same as
g(0) == 1
or
XOR with 01 binary operation
及
就这样!
希望我已经回答了您的问题。使用每个状态的符号表示来实现状态:
(True, True) == 3 decimal or 11 binary
(True, False) == 2 decimal or 10 binary
(False, True) == 1 decimal or 01 binary
(False, False) == 0 decimal or 00 binary
这里是函数f和g
g((True, True)) = (True, False)
is the same as
g(3) == 2 decimal
or
XOR with 01 binary operation
g((True, False)) = (True, True)
is the same as
g(2) == 3
or
XOR with 01 binary operation
g((False, True)) = (False, False)
is the same as
g(1) == 0
or
XOR with 01 binary operation
g((False, False)) = (False, True)
is the same as
g(0) == 1
or
XOR with 01 binary operation
及
就这样!
希望我已经回答了你的问题。好吧,最简单的方法不是使用函数,而是用参数给出的键和结果给出的值构建两个字典f和g
这将比将对映射到0…3并生成两个数组f和g(数组将比查找列表更快,numpy数组可能更快)或甚至两个函数要慢,因为实际上
f(x)=3-x
(或按位不:~x
)和g(x)=x^1
(^是XOR),这可能是最快的,最简单的方法不是使用函数,而是构建两个字典f和g,其中键由参数给出,值由结果给出
这将比将对映射到0…3并生成两个数组f和g(数组将比查找列表快,numpy数组可能更快)或甚至两个函数要慢,因为事实上
f(x)=3-x
(或按位不:~x
)和g(x)=x^1
(^is-XOR)可能最快。谢谢。我已经用我在数据结构上的两个操作编辑了这个问题。谢谢。我用我在数据结构上的两个操作编辑了这个问题。