algorithm - 算法帮助 - 电话号码的唯一编码
问题描述
我有一本单词词典,分为两个不同长度的列表,形容词和名词。我希望能够将任何电话号码可逆地编码为一种格式,其中我有一个或多个形容词后跟一个名词。
示例可能是“+447911123456”=>“敏捷时髦的黄貂鱼”“07911123456”=>“时髦的老高尔夫球杆”
它应该具有雪崩效应等特性,并相对均匀地使用字典中的所有单词。
我一直无法想出满足所有要求的算法。有谁知道如何做到这一点,或者在哪里可以了解有关进行这种编码的更多信息?
如果有帮助,我已经在 github 上提供了字典。任何帮助表示赞赏!
解决方案
可逆地编码任何电话号码这样的事情怎么样?
- 给定电话号码通常是 10 - 14 位数字,包括国际代码,如果我们忽略国际拨号代码“+”,我们可以将其视为 64 位整数(最多 19 位数字)。
- 将段分成 3 个大致均匀的区域 = 每个区域 21 位。
- 对具有固定重复模式的每个区域进行异或运算 - 即 seg 1 为 01,seg 2 为 10,seg 3 为 11。
- 执行 21 位宽的简单加密……可以轻松开发简单的自定义加密。
- 在这些转换之后,您最终得到 3 个数字。使用数字作为字典的键。第三块将引用名词词典。
第 3 步和第 4 步的目的是混淆您正在做的事情。例如,如果我们有 111 111 111 作为我们的号码,没有 3 和 4,我们可能会有“happy happy dog”。使用 3 和 4,即使段 1 和 2 相同,也会产生不同的词,例如“快乐邋遢的狗”。相反,我们可能会得到一个完全不同的数字导致重复的单词......即111 843 111 =>“happy happy cat”。
因为它仅用于混淆目的,所以这些不需要非常“安全”......
推荐阅读
- javascript - 为什么 useEffect 不改变段落?
- android - Android Opencv 无法拼接所有图像
- python - Pong - 当任一玩家达到分数阈值时崩溃而不是重置游戏
- java - java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException 与 ANT web 项目
- scilab - 从 Scilab 中的方程计算离散序列
- python - 在 dict 错误中转字符串 - 行继续字符后出现意外字符 - python
- python - 不需要的运行 else/if not 循环
- python - 如何将多个xml文件附加到一个文件中
- jira - 如何在 JQL 中查找给定用户以外的其他人发表评论的票证?
- qr-code - 破坏二维码以创建圆圈:角落是否必要?