假设您使用字符串“a”和“z”,并按字母顺序列出它们之间的所有字符串:['a'、'b'、'c'…'x’,‘y’,‘z’]。取这个列表的中点,你就会找到'm'。这有点像取这两条弦的平均值。在
您可以将其扩展到包含多个字符的字符串,例如,“aa”和“zz”之间的中点将位于列表的中间[“aa”、“ab”、“ac”…”zx’,‘zy’,‘zz’]。在
有没有一个Python方法可以做到这一点呢?如果没有,即使知道算法的名称也会有帮助。在
我开始制定自己的程序,简单地遍历两个字符串并找到第一个不同字母的中点,这在“aa”和“az”的中点是“am”时似乎很有效,但在“cat”、“doggie”的中点(它认为是“c”)上失败了。我试着在google上搜索“二进制搜索字符串中点”等,但不知道我要做什么的名字,我没有什么运气。
我添加了自己的解决方案作为答案
如果你的意思是按字母顺序,只需使用FogleBird的算法,但要颠倒参数和结果!在
或者像这样重写average
^{pr2}$这听起来像你想要的,就是把字母字符作为一个介于0和1之间的以26为底的值。当你有不同长度的字符串(以10为基数的例子),比如305和4202,你的中间点是3,因为你一次只看一个字符。相反,将它们视为浮点尾数:0.305和0.4202。从这一点,很容易得出一个0.3626的中点(如果你愿意,你可以四舍五入)。在
以26为基数(a=0…z=25,ba=26,bb=27等)进行字母计算:
cat变为'a.cat',doggie变为'a.doggie',计算得出cat的十进制值为0.078004096,doggie的值为0.136390697,平均值为0.107197397,以26为基数大致为“cumcqo”
如果你定义了一个字符的字母表,你只需转换成以10为基数,再进行平均,再转换回base-N,其中N是字母表的大小。在
编辑:根据评论和其他答案,您可能需要处理不同长度的字符串,方法是将字母表的第一个字母附加到较短的单词上,直到长度相同为止。这将导致“平均值”落在词典排序的两个输入之间。下面是代码更改和新输出。在
^{pr2}$相关问题 更多 >
编程相关推荐