按标识符检测序列元素或按序列元素检测标识符。
LordKe的Python项目详细描述
它解决了基于 给定长度的字母表,并使用组合来确定 迭代索引。
问题
有几个元素要迭代-a、b和c。多少? 如果键大小为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