您将获得一个包含字符串列表的文件(每行一个)。对字符串进行排序,然后使用未知的替换密码(例如a < c, b < r, c < d
)进行加密。如何确定替换密码的映射是什么?未加密的字符串可以使用任何语言。
我想知道这个问题是否很难,我正在申请一个新的毕业生职位,我无法解决这个问题,而且他在这个问题上和我待了约45分钟。
答案 0 :(得分:6)
我猜关键的事实是字符串在加密之前已经排序,所以你根本不用担心语言。
我想到的第一个解决方案就是创建一个强力回溯算法,但这可能不太好。
我能想到的第二个解决方案是从文件中提取所有已知关系,例如。这个档案:
xtw
yaw
yay
会告诉你x < y
(因为xtw&lt; yaw)和w < y
(因为yaq&lt; yay)。在获得关系的有向图之后,您只需要对该图进行拓扑排序,并且您的解决方案就在那里。
答案 1 :(得分:0)
我不会将其标记为一个简单的问题。我认为无论你使用什么解决方案,你都需要有一些强大的启发式方法,最好是一些做密码难题的经验。
你提到字符串是排序的,我不确定你是否可以将它用作启发式;如果是,那么你可以查看每个单词的第一个字符,并用它来计算出密码是什么。不过,我会假设你不能这样做。
首先列出所选语言的所有单词的字典,如果可能的话,还要考虑这些单词往往发生频率的频率。从最不频繁出现的大小单词开始(对于大多数语言,包括英语,这将是1个字母的单词),并开始尝试不同的可能性进行广度优先搜索。
但可能有更好的解决方案。
答案 2 :(得分:0)
那么,通常使用统计方法(频率分布)来“替换”替换密码,这可能在这里不可行,因为你不知道未被打字的字符串的语言(可能是vulcan?)。你仍然可以至少尝试一些已知的发行版。提示是输入已排序(假设它是拉丁字母)。我还是无法判断这会有多难。
但只是一个问题:为什么你认为在这次测试中你必须“解决”实际问题?我认为面试官只是想测试你的一般问题解决技巧,你如何解决问题,你不合格的地方(来自Google的经典访谈:你很小,坐在一个巨大的搅拌机里:你做什么? )
此致 安德烈亚斯
答案 3 :(得分:0)
替换是一种对称加密方法,这里我们根据所选择的键更改/替换任何字符,如果你有一个值为5的键,那么单词“piran”就会以这种方式改变:p被替换通过'u',我通过'j'等等,意味着我们用ASCII值比原始字符大5的字符替换每个字符,因为'p'的ASCII值是112并且如果我们添加5然后它变成112 + 5 = 117,这里117是'u'的ASCII值所以这样每个字符都被改变了,有一点需要注意,如果你有'z'值并且你有5的键然后在这种情况下不会出现英文字母,因为在计算机中可能存在太多字符,即使您将选择像“349833720”这样的百万字符,那么您将获得其他语言的字符,如中文等,因为在计算机中有每种类型角色的容量,这是预定义的, 触发此链接并查看我在上面描述的加密实用示例/应用https://play.google.com/store/apps/details?id=com.ifahja.secretsms#?t=W251bGwsMSwxLDIxMiwiY29tLmlmYWhqYS5zZWNyZXRzbXMiXQ ..