Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 优化四态数据结构_Python - Fatal编程技术网

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)可能最快。

谢谢。我已经用我在数据结构上的两个操作编辑了这个问题。谢谢。我用我在数据结构上的两个操作编辑了这个问题。