按标识符检测序列元素或按序列元素检测标识符。

LordKe的Python项目详细描述


它解决了基于 给定长度的字母表,并使用组合来确定 迭代索引。

问题

有几个元素要迭代-abc。多少? 如果键大小为3,则唯一枚举的可能组合?或者,哪个 组合在第十次迭代中?或者哪个迭代对应于 aca组合?

对于abc,可以在下一次迭代中创建字母表和3个键大小:

 0. aaa      1. aab      2. aac      3. aba      4. abb      5. abc
 6. aca      7. acb      8. acc      9. baa     10. bab     11. bac
12. bba     13. bbb     14. bbc     15. bca     16. bcb     17. bcc
18. caa     19. cab     20. cac     21. cba     22. cbb     23. cbc
24. cca     25. ccb     26. ccc

这样,最大的迭代次数^ {tT6}$,对于{TT7}$$迭代对应 到baa组合和aca组合-它是7迭代。

理论

使用任意字母表(一组可用字符来创建密钥)和 键的大小可以创建一系列唯一的组合,其中每个新的 组合具有唯一的数字索引(从0到n),其中n是最大的。 可能的组合数或无穷大)。

如果指定索引(例如数据库表中的id),则 返回此索引的组合(键),如果指定组合- 将返回它的索引。

p.s.序列不是创建的-只是计算指定的 元素。这个算法可以让你快速得到结果。

示例:

# INITIAL DATA
# =================
# Alphabet | abcde
# ---------+-------
# Key size | 3
#
# SEQUENCE
# ==============================================
# ID  |  0  |  1  |  2  | ... | 122 | 123 | 124
# ----+-----+-----+-----+-----+-----+-----+-----
# Key | aaa | aab | aac | ... | eec | eed | eee

lk = LordKey(alphabet='abcde', size=3)
lk.get_key_by_id(122) # eec
lk.get_id_by_key('ecc') # 122

字母表可以省略,默认情况下将使用值。如果不设置 大小值-键的大小可以从一个字符到无穷大。

示例:

# Size not specified.
lk = LordKey(alphabet='abc')
lk.get_key_by_id(1) # b
lk.get_key_by_id(10) # bab
lk.get_key_by_id(100) # bacab
lk.get_key_by_id(1000) # bbabaab
lk.get_key_by_id(10000) # bbbcabbab
lk.get_key_by_id(100000) # bcaacabbcab
lk.get_key_by_id(1000000) # bcbccbacacaab
lk.get_key_by_id(10000000) # caacbbaabbacbab

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java获取JEditorPane中字符的绝对位置   java Datetime:将时间段拆分为天、小时和分钟   java是使此HashMap更高效的一种方法   java项目reactor:collectList()之后的block()对Flux不起作用。创建()   java在Mac OSX上安装OpenCV   java递归地确定一组数字是否包含两个总和相等的子集   Quad2D曲线上的几何图形Java绘图箭头   java将SSL证书导入Glassfish 4。十、   java Android未找到处理Intent MediaScanner的活动   EclipseJava。安全cert.CertificateParsingException:java。木卫一。IOException:主题密钥,无法创建EC公钥   java我能在O(M log N)时间内完成吗?   java跟踪eclipse中的资源更改也在中。元数据和。项目   java如何完全禁用Android键盘   java返回到上一个活动