Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将字符串映射到保持字典顺序的数字_Algorithm_String_Sorting_Function_Mapping - Fatal编程技术网

Algorithm 将字符串映射到保持字典顺序的数字

Algorithm 将字符串映射到保持字典顺序的数字,algorithm,string,sorting,function,mapping,Algorithm,String,Sorting,Function,Mapping,我正在寻找一种算法或函数,它能够将字符串映射到一个数字,从而使结果值符合字符串的字典顺序。例如: "book" -> 50000 "car" -> 60000 "card" -> 65000 "a longer string" -> 15000 "another long string" -> 15500 "awesome" -> 16000 作为一个函数,它应该类似于:f(x)=y,因此对于任何x1f(x1)等。考虑值>代码> f(a)< /代码>,代码

我正在寻找一种算法或函数,它能够将字符串映射到一个数字,从而使结果值符合字符串的字典顺序。例如:

"book" -> 50000
"car"  -> 60000
"card" -> 65000
"a longer string" -> 15000
"another long string" -> 15500
"awesome" -> 16000
作为一个函数,它应该类似于:f(x)=y,因此对于任何x1f(x1)
如果x的输入集是有限的,那么我总是可以进行排序并分配适当的值,但是我正在寻找一些通用的方法,用于x的无限输入集。

如果您需要将
f
映射到整数,这是不可能的

假设有这样一个映射
f
。考虑字符串<代码> A<代码> AA/<代码>,<代码> AAA < /代码>等。考虑值>代码> f(a)< /代码>,代码> f(aa)< /代码>,代码> f(AAA)< /代码>,如我们要求<代码> f(a)< f(aa)< f(AAA)<…>代码>,我们看到<代码> f(AAN)趋向无穷大,<<代码> n>代码>趋于无穷大;这里我使用了一个明显的符号,
a\u n
是字符
a
重复
n
次。现在考虑字符串<代码> b>代码>。我们要求所有
n
f(a\u n)
。但是
f(b)
是一个有限整数,我们刚刚证明了
f(a_n)
是无穷大的。我们有一个矛盾。这样的地图是不可能的


也许你能告诉我们你需要这个做什么?这是相当抽象的,我们可以提出一些更合适的建议。此外,不必担心解决“it”问题。雅格尼和所有这些。

如果你要求
f
映射到整数,这是不可能的

假设有这样一个映射
f
。考虑字符串<代码> A<代码> AA/<代码>,<代码> AAA < /代码>等。考虑值>代码> f(a)< /代码>,代码> f(aa)< /代码>,代码> f(AAA)< /代码>,如我们要求<代码> f(a)< f(aa)< f(AAA)<…>代码>,我们看到<代码> f(AAN)趋向无穷大,<<代码> n>代码>趋于无穷大;这里我使用了一个明显的符号,
a\u n
是字符
a
重复
n
次。现在考虑字符串<代码> b>代码>。我们要求所有
n
f(a\u n)
。但是
f(b)
是一个有限整数,我们刚刚证明了
f(a_n)
是无穷大的。我们有一个矛盾。这样的地图是不可能的


也许你能告诉我们你需要这个做什么?这是相当抽象的,我们可以提出一些更合适的建议。此外,不必担心解决“it”问题。YAGNI和所有这些。

编写一个比较器会更好,您可以将它提供给排序函数。比较器接受两个字符串并返回-1、0或1。即使你可以创建这样一个地图,你仍然需要在上面排序。如果您需要一个“散列”和顺序,那么将内容保存在两个数据结构中——一个保留顺序,另一个允许快速访问

编写一个可以提供给排序函数的比较器会更好。比较器接受两个字符串并返回-1、0或1。即使你可以创建这样一个地图,你仍然需要在上面排序。如果您需要一个“散列”和顺序,那么将内容保存在两个数据结构中——一个保留顺序,另一个允许快速访问

也许a就是你要找的

根树、Patricia trie/树,或 crit位树是一个特殊的集合 基于trie的数据结构 用于存储一组字符串。在里面 与常规trie相比 Patricia trie的边缘已标记 用字符序列而不是 而不是单个字符。这些可以 是字符串、位字符串 例如整数或IP地址,或 一般任意序列 按字典顺序排列的对象。 有时,这些名称以树和树为基数 临界位树仅适用于 存储整数的树与Patricia 保留trie用于更一般的用途 输入,但结构工作正常 在所有情况下都是这样

.

也许a就是你要找的

根树、Patricia trie/树,或 crit位树是一个特殊的集合 基于trie的数据结构 用于存储一组字符串。在里面 与常规trie相比 Patricia trie的边缘已标记 用字符序列而不是 而不是单个字符。这些可以 是字符串、位字符串 例如整数或IP地址,或 一般任意序列 按字典顺序排列的对象。 有时,这些名称以树和树为基数 临界位树仅适用于 存储整数的树与Patricia 保留trie用于更一般的用途 输入,但结构工作正常 在所有情况下都是这样

.

如果可以将字符串映射到有理数,那么这种映射非常简单。如果
code(c)
是字符
c
的ASCII码,
s[i]
是字符串
s
中的第
i
个字符,则如下求和:

result <- 0
scale  <- 1
for i from 1 to length(s) 
  scale <- scale / 26
  index <- (1 + code(s[i]) - code('a'))
  result <- result + index / scale
end for
return result
result如果可以将字符串映射到有理数,那么这种映射非常简单。如果
code(c)
是字符
c
的ASCII码,
s[i]
是字符串
s
中的第
i
个字符,则如下求和:

result <- 0
scale  <- 1
for i from 1 to length(s) 
  scale <- scale / 26
  index <- (1 + code(s[i]) - code('a'))
  result <- result + index / scale
end for
return result

result您要求的是暂时中止鸽子洞原则()

弦是鸽子,数字是洞。
鸽子比洞多,所以你不能把每只鸽子都放在自己的洞里。

你要求的是暂时中止鸽子洞原则()

弦是鸽子,数字是洞。
鸽子比洞多,所以你不能把每只鸽子都放在自己的洞里。

我在这里发了一个问题 作为权宜之计