优化四态数据结构

时间:2012-02-16 01:43:15

标签: python

我正在操纵同样数据结构的多个实例,这些实例可以有四种状态之一。目前,我使用True / False对实现状态:

(True, True)
(True, False)
(False, True)
(False, False)

使用这些数据结构,我重复应用两个函数fg其中

g((True, True)) = (True, False)
g((True, False)) = (True, True)
g((False, True)) = (False, False)
g((False, False)) = (False, True)

f((True, True)) = (False, False)
f((True, False)) = (False, True)
f((False, True)) = (True, False)
f((False, False)) = (True, True)

我可以改进这两种功能的数据结构吗? (我想优化速度。)

5 个答案:

答案 0 :(得分:1)

用于操纵这些状态的代码对性能的影响要大于存储状态的代码。您需要如何操纵它将决定存储它的最佳方式。如果不了解所涉及的算法,就不可能对数据表示进行评论。

状态是自然地表示为两个布尔值,还是四个不同的状态?

答案 1 :(得分:1)

使用0..3范围内的整数,并使用位算术实现状态转换(g xors with 1; f xors with 3)。

答案 2 :(得分:1)

使用每个州的符号表示来实现状态:

(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((True, True)) = (False, False)
is the same as 
f(3) = 0
or 
XOR with 11 binary operation

f((True, False)) = (False, True)
is the same as 
f(2) = 1
or 
XOR with 11 binary operation

f((False, True)) = (True, False)
is the same as 
f(1) = 2
or 
XOR with 11 binary operation

f((False, False)) = (True, True)
is the same as 
f(0) = 3
or 
XOR with 11 binary operation

就是这样! 希望我已经回答了你的问题。

答案 3 :(得分:0)

您可以使用四叉树和四元组来存储状态。当您需要快速查找和需要查找子树时,查询会更有效。您可以进一步查看四叉树并使用怪物曲线。怪物曲线完整填充空间,但它仍然是一条曲线。沿着该曲线放置状态,您可以在2维中对它们进行排序,将其减少到1维。这就像拥有一个hierarchycal集群。最着名的怪物曲线是希尔伯特曲线。

答案 4 :(得分:0)

嗯,最简单的做法是不使用函数,而是使用由结果给出的参数和值给出的键来构建两个字典f和g。

这比将对映射到0 ... 3并且使两个数组f和g(数组将比查找列表更快,numpy数组甚至更快),甚至两个函数更慢,因为事实上f(x)= 3-x(或按位不:~x)和g(x)=x^1(^是异或),这可能是最快的。