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

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第三方库


热门话题
IntelliJ中的java默认Maven项目结构不一致   java我希望链接(在帖子和页面上)在一些访问者加载时被自动点击   java如何使用单独的方法隐藏JButton并在新类中调用   java KStream leftJoin KStream具有相同的密钥   java图像在垂直滚动窗格视图端口中消失   java从指定的起始点开始以n的增量填充数组   java JLabel和JTextField不在swing表单中应用   java springboot mongo如果没有映像,请使用现有映像   类似C++映射的java容器   java如何在没有Valgrind错误的情况下调用JNI_CreateJavaVM?   java如何在安卓中运行后台服务   java onPostExecute不运行