Math 您可以使用以下字符创建多少个可能的URL?

Math 您可以使用以下字符创建多少个可能的URL?,math,numbers,friendly-url,Math,Numbers,Friendly Url,我想为200万资产创建一个简短的URL服务,但我想使用尽可能短的字符数 我需要用什么数学方程式来计算呢?我知道这与阶乘有关,对吧?可能的短url数=(ID中可能的不同字符数)提高到(url中ID的长度)的幂次方 例如,如果您只使用小写字符(其中有26个)并且您的URL看起来像(您的唯一id为5个字符),那么您可以创建26^5=11881376个短URL 如果您使用大写和小写字母,您将有52个,因此52^5=380204032个可能的短URL等等。您需要回答许多问题,例如您希望在集合中允许哪些类型

我想为200万资产创建一个简短的URL服务,但我想使用尽可能短的字符数


我需要用什么数学方程式来计算呢?我知道这与阶乘有关,对吧?

可能的短url数=(ID中可能的不同字符数)提高到(url中ID的长度)的幂次方

例如,如果您只使用小写字符(其中有26个)并且您的URL看起来像(您的唯一id为5个字符),那么您可以创建26^5=11881376个短URL


如果您使用大写和小写字母,您将有52个,因此52^5=380204032个可能的短URL等等。

您需要回答许多问题,例如您希望在集合中允许哪些类型的字符

所有字母和数字?基数36(5个字符可容纳2mil+)

区分大小写?以62为基数(4个字符)


是否删除容易出错的字符和数字(例如i/l 0/o)?大约以32为基数(也就是5个字符)

这不是一个阶乘问题,而是一个指数问题

如果
x
是可能的字符数,则需要求解
y
的以下等式:

x^y = 2000000
如果要使用所有数字和区分大小写的alpha
[0-9A-Za-z]
,则有62个可能的值。这意味着您需要解决以下问题:

     62^y = 2000000
y*log(62) = log(2000000)
        y = log(2000000) / log(62)
        y = 3.5154313828...
当然,URL中不能有3.5个字符,因此需要4个字符。如果要更改用于URL的字符集,只需使用集合中的值数量解决上述问题


注意求解此方程时假设URL的长度固定。有关可变长度URL,请参见Rob的答案。

根据HTTP/URI规范,您还可以使用以下“无保留字符”:字母/数字/“-”/“/”\u”/“~”

这会在基数中增加4个字符,因此

Math.log(2000000) / Math.log(66) = 3.4629721616408813

尽管这仍然意味着您将得到最多4个字符的URL路径。

@jheddings很接近,并且得到了正确的答案,但数学计算并不完全正确。别忘了,你并不局限于特定长度的所有字符排列。您还可以利用长度为1到y个字符的URL。因此,我们需要此总和的闭合值:

x+x^2+x^3+…+x^y=2000000

幸运的是,该总和有一个封闭形式:

x+x^2+x^3+…+x^y=x*(x^y-1)/(x-1)=2000000

x是范围内可能的字符数。为了简单起见,我们假设它只包括小写、大写和数字(26+26+10=62)

然后我们得到以下方程式:

2000000 = (62^(y+1) - 62)/(62-1)
2000000 = (62^(y+1) - 62)/(61)
2000000 * 61 = 62^(y+1) - 62
122000000 = 62^(y+1) - 62
122000000 + 62 = 62^(y+1)
122000062 = 62^(y+1)
log(122000062) = (y+1)
log(122000062) / log(62) = y+1
4.511492 = y+1
3.511492 = y

正如你所说,3.5个字符是不可能的,所以需要4个字符。诚然,在这种情况下,差异并不重要。但是,在某些情况下(特别是在处理base 2时),这一点非常重要。

您通常可以在不使用任何数学技巧的情况下解决此类问题

26+26+10=62个字符

Try 1. 62 = 62
Try 2. 62*62 = 3,844
Try 3. 62*62*62 = 238,328
Try 4. 62*62*62*62 = 14,776,336

因此,4是您的答案:)

关于可变长度URL的观点很好。然而,我认为,对于固定长度的URL,我的计算是正确的;)+1.