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
String 如何从字符数量范围内的数字生成唯一字符串';这个字符串中的排列?_String_Algorithm_Math_Permutation - Fatal编程技术网

String 如何从字符数量范围内的数字生成唯一字符串';这个字符串中的排列?

String 如何从字符数量范围内的数字生成唯一字符串';这个字符串中的排列?,string,algorithm,math,permutation,String,Algorithm,Math,Permutation,假设我有一个长度为8个字节的字符串,每个字节都是一个来自下一个范围的字符:0-9,a-z,a-z,总共62个变体。此字符串的置换总数为62,8=218340105584896的幂。 我需要编写一个函数来接受范围内的数字 0-218340105584896并返回唯一字符串。在unique下,我的意思是函数不能为这个范围内的两个不同的数字返回相同的字符串。任何代码示例和提示都将不胜感激 您可以将该数字视为以62为基数的数字,并相应地填写字符串“digits”(以62为基数的位) 让我们看看如何使用不

假设我有一个长度为8个字节的字符串,每个字节都是一个来自下一个范围的字符:0-9,a-z,a-z,总共62个变体。此字符串的置换总数为62,8=218340105584896的幂。 我需要编写一个函数来接受范围内的数字

0-218340105584896并返回唯一字符串。在unique下,我的意思是函数不能为这个范围内的两个不同的数字返回相同的字符串。任何代码示例和提示都将不胜感激

您可以将该数字视为以62为基数的数字,并相应地填写字符串“digits”(以62为基数的位)

让我们看看如何使用不同基数的十进制数1234来实现这一点。请注意,下面的除法始终是整数除法(小数部分被截断)

基数10(十进制):0-9

基数16(十六进制):0-9,a-f(其中a=10,b=11,…)

这可以扩展到任何基地,包括基地62:0-9,a-z,a-z

1234 / 62^1 = j, 1234 mod 62^1 = 56
56 / 62^0 = U, 56 mod 62^0 = 0
Thus we represent this number in base-62 as "jU"
我没有费心去做前导0,但是你可以看到1234/62^2=0,1234 mod 62^2=1234,所以在base-62中可以有“000000 ju”



请注意,您只能对[0,218340105584896]范围内的数字执行此操作,因此无法表示218340105584896。

您可以将该数字视为基数为62的数字,并相应地填写字符串“数字”(基数为62位)

让我们看看如何在不同的基数中使用十进制数1234。请注意,下面的除法始终是整数除法(小数部分被截断)

基数10(十进制):0-9

基数16(十六进制):0-9,a-f(其中a=10,b=11,…)

这可以扩展到任何基地,包括基地62:0-9,a-z,a-z

1234 / 62^1 = j, 1234 mod 62^1 = 56
56 / 62^0 = U, 56 mod 62^0 = 0
Thus we represent this number in base-62 as "jU"
我没有费心去做前导0,但是你可以看到1234/62^2=0,1234 mod 62^2=1234,所以在base-62中可以有“000000 ju”



请注意,您只能对范围内的数字执行此操作[0,218340105584896),因此不可能表示218340105584896。

如果我正确理解了您的问题,那么就在昨天,我将一个JavaScript代码用于回答另一个问题,您感兴趣的方法是
IndexOperation
。请注意,JS对数字类型有一些限制,因此它不适用于但是如果你把它翻译成支持64位
long
整数类型的其他语言,它应该可以工作。不幸的是,你没有添加任何语言标记,所以我自己无法进行翻译。

如果我正确理解了你的问题,那么就在昨天,我添加了一个JavaScript代码来回答另一个问题您感兴趣的d是
indexoperVariation
。请注意,JS对数字类型有一些限制,因此它不适用于您的范围,但如果您将其翻译成其他支持64位
long
整数类型的语言,它应该可以工作。不幸的是,您没有放置任何语言标记,因此我无法自己进行翻译。

U幸运的是,这是。不过,你想做的是所谓的字典顺序取消分级,你可能会发现这很有用。@LSerni谢谢你,我将研究这篇论文,并尝试为我自己的问题提供工作代码示例,也许这对某人有用。@LSerni:这篇论文是关于排列的;尽管OP使用了单词排列,t这个问题是关于一个集合的,这是完全不同的事情。而且,确实允许关于“软件算法”的问题,所以这个问题是否脱离主题还不完全清楚。但是,这个问题已经被回答了很多次。不幸的是,这是。您想做的是所谓的字典顺序取消分级,您可能会发现它很有用。@LSerni谢谢您,我将研究这篇论文,并尝试自己为我的问题提供工作代码示例,也许会对某人有用。@LSerni:那篇论文是关于置换的;虽然OP使用了置换这个词,但问题是关于集合的,这是完全不同的事情。此外,确实允许关于“软件算法”的问题,所以这个问题是否离题还不完全清楚。但是,这个问题已经被回答了很多次。谢谢你的回答,它帮助了我,我对它投了更高的票,但是Yoyango在这里提供了解释,所以我接受了他的回答。@User590254,显然你可以自由地接受任何你认为值得的答案。为我辩护,我认为参考答案包含“背后的一些数学”部分有类似的解释,所以我没有在这里提供。谢谢你的回答,它帮助了我,我对它投了赞成票,但Yoyango在这里提供了解释,所以我接受了他的答案。@User590254,显然你可以自由接受任何你认为值得的答案。为我辩护,我认为引用的答案包含“它背后的一些数学”部分有类似的解释,所以我没有在这里提供。
1234 / 62^1 = j, 1234 mod 62^1 = 56
56 / 62^0 = U, 56 mod 62^0 = 0
Thus we represent this number in base-62 as "jU"