格雷码¶
- class sympy.combinatorics.graycode.GrayCode(n, *args, **kw_args)[源代码][源代码]¶
格雷码本质上是在一个边长为一的n维立方体上的哈密顿路径。立方体的顶点由二进制值的向量表示。哈密顿路径恰好访问每个顶点一次。3维立方体的格雷码是[‘000’,’100’,’110’,’010’,’011’,’111’,’101’, ‘001’]。
格雷码解决了按顺序生成所有可能的 n 个对象子集的问题,使得每个子集都是通过删除或添加单个对象从前一个子集获得的。在上面的例子中,1 表示对象存在,0 表示对象不存在。
格雷码在统计学中也有应用,当我们想要以高效的方式计算与子集相关的各种统计数据时。
- 属性:
args
返回 ‘self’ 的参数元组。
assumptions0
返回对象 \(type\) 假设。
canonical_variables
返回一个字典,将
self.bound_symbols
中定义的任何变量映射到与表达式中任何自由符号不冲突的符号。current
返回当前引用的格雷码作为位字符串。
- expr_free_symbols
free_symbols
从自身的原子中返回那些自由符号。
func
表达式中的顶级函数。
- is_algebraic
- is_antihermitian
- is_commutative
is_comparable
如果 self 可以计算为一个具有精度的实数(或已经是一个实数),则返回 True,否则返回 False。
- is_complex
- is_composite
- is_even
- is_extended_negative
- is_extended_nonnegative
- is_extended_nonpositive
- is_extended_nonzero
- is_extended_positive
- is_extended_real
- is_finite
- is_hermitian
- is_imaginary
- is_infinite
- is_integer
- is_irrational
- is_negative
- is_noninteger
- is_nonnegative
- is_nonpositive
- is_nonzero
- is_odd
- is_polar
- is_positive
- is_prime
- is_rational
- is_real
- is_transcendental
- is_zero
n
返回格雷码的维度。
rank
对格雷码进行排序。
selections
返回格雷码中位向量的数量。
方法
as_content_primitive
([radical, clear])一个存根,允许在计算表达式的内容和基本组件时跳过基本参数(如元组)。
as_dummy
()返回表达式,其中任何具有结构绑定符号的对象都被替换为在其出现的对象中唯一的规范符号,并且仅对交换性具有默认假设为True。
atoms
(*types)返回构成当前对象的原子。
class_key
()类的好顺序。
compare
(other)如果对象在规范意义上小于、等于或大于其他对象,则返回 -1、0、1。
count
(query)计算匹配的子表达式的数量。
count_ops
([visual])用于返回操作计数的 count_ops 的包装器。
doit
(**hints)评估默认情况下不评估的对象,如极限、积分、求和和乘积。
dummy_eq
(other[, symbol])比较两个表达式并处理哑符号。
find
(query[, group])查找所有匹配查询的子表达式。
fromiter
(args, **assumptions)从可迭代对象创建一个新对象。
generate_gray
(**hints)生成格雷码的位向量序列。
has
(*patterns)测试是否有任何子表达式匹配任何模式。
has_free
(*patterns)如果 self 包含对象
x
作为自由表达式,则返回 True,否则返回 False。has_xfree
(s)如果 self 有 s 中的任何一个模式作为自由参数,则返回 True,否则返回 False。
is_same
(b[, approx])如果 a 和 b 结构相同则返回 True,否则返回 False。
match
(pattern[, old])模式匹配。
matches
(expr[, repl_dict, old])用于 match() 的辅助方法,用于在 self 中的通配符符号与 expr 中的表达式之间寻找匹配。
next
([delta])返回当前值在规范顺序中距离 ``delta``(默认 = 1)的格雷码。
rcall
(*args)通过表达式树递归应用于参数。
refine
([assumption])请参阅 sympy.assumptions 中的 refine 函数。
replace
(query, value[, map, simultaneous, exact])将
self
中匹配的子表达式替换为value
。rewrite
(*args[, deep])使用定义的规则重写 self。
simplify
(**kwargs)请参阅 sympy.simplify 中的 simplify 函数。
skip
()跳过位生成。
sort_key
([order])返回一个排序键。
subs
(*args, **kwargs)在简化参数后,在表达式中用新内容替换旧内容。
unrank
(n, rank)取消排名为 k 的 n 位大小的格雷码。
xreplace
(rule)替换表达式中对象的出现。
复制
could_extract_minus_sign
is_hypergeometric
参考文献
[1]Nijenhuis,A. 和 Wilf,H.S. (1978). 组合算法. 学术出版社.
[2]Knuth, D. (2011). 计算机程序设计艺术, 卷4 Addison Wesley
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(3) >>> list(a.generate_gray()) ['000', '001', '011', '010', '110', '111', '101', '100'] >>> a = GrayCode(4) >>> list(a.generate_gray()) ['0000', '0001', '0011', '0010', '0110', '0111', '0101', '0100', '1100', '1101', '1111', '1110', '1010', '1011', '1001', '1000']
- property current¶
返回当前引用的格雷码作为位字符串。
示例
>>> from sympy.combinatorics import GrayCode >>> GrayCode(3, start='100').current '100'
- generate_gray(**hints)[源代码][源代码]¶
生成格雷码的位向量序列。
参见
参考文献
[1]Knuth, D. (2011). 计算机程序设计艺术, 卷4, Addison Wesley
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(3) >>> list(a.generate_gray()) ['000', '001', '011', '010', '110', '111', '101', '100'] >>> list(a.generate_gray(start='011')) ['011', '010', '110', '111', '101', '100'] >>> list(a.generate_gray(rank=4)) ['110', '111', '101', '100']
- property n¶
返回格雷码的维度。
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(5) >>> a.n 5
- next(delta=1)[源代码][源代码]¶
返回当前值在规范顺序中距离 ``delta``(默认 = 1)的格雷码。
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(3, start='110') >>> a.next().current '111' >>> a.next(-1).current '010'
- property rank¶
对格雷码进行排序。
排名算法决定了组合对象在给定顺序下相对于所有对象的位置(或排名)。例如,4位二进制反射格雷码(BRGC)’0101’的排名为6,因为它在4位格雷码族的标准顺序中位于第6位。
参见
参考文献
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(3) >>> list(a.generate_gray()) ['000', '001', '011', '010', '110', '111', '101', '100'] >>> GrayCode(3, start='100').rank 7 >>> GrayCode(3, rank=7).current '100'
- property selections¶
返回格雷码中位向量的数量。
示例
>>> from sympy.combinatorics import GrayCode >>> a = GrayCode(3) >>> a.selections 8
- graycode.random_bitstring()[源代码]¶
生成一个长度为 n 的随机位列表。
示例
>>> from sympy.combinatorics.graycode import random_bitstring >>> random_bitstring(3) 100
- graycode.gray_to_bin()[源代码]¶
从格雷码转换为二进制码。
我们假设大端编码。
参见
示例
>>> from sympy.combinatorics.graycode import gray_to_bin >>> gray_to_bin('100') '111'
- graycode.bin_to_gray()[源代码]¶
从二进制编码转换为格雷编码。
我们假设大端编码。
参见
示例
>>> from sympy.combinatorics.graycode import bin_to_gray >>> bin_to_gray('111') '100'
- graycode.get_subset_from_bitstring(bitstring)[源代码]¶
获取由位串定义的子集。
示例
>>> from sympy.combinatorics.graycode import get_subset_from_bitstring >>> get_subset_from_bitstring(['a', 'b', 'c', 'd'], '0011') ['c', 'd'] >>> get_subset_from_bitstring(['c', 'a', 'c', 'c'], '1100') ['c', 'a']
- graycode.graycode_subsets()[源代码]¶
生成由格雷码枚举的子集。
示例
>>> from sympy.combinatorics.graycode import graycode_subsets >>> list(graycode_subsets(['a', 'b', 'c'])) [[], ['c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'c'], ['a']] >>> list(graycode_subsets(['a', 'b', 'c', 'c'])) [[], ['c'], ['c', 'c'], ['c'], ['b', 'c'], ['b', 'c', 'c'], ['b', 'c'], ['b'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c', 'c'], ['a', 'b', 'c'], ['a', 'c'], ['a', 'c', 'c'], ['a', 'c'], ['a']]