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

mag*_*ger 3 math friendly-url numbers

我想为200万资产制作一个简短的URL服务,但我想使用最短数量的可能字符.

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

jhe*_*ngs 11

这不是一个因子问题,而是一个指数问题.

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

x^y = 2000000
Run Code Online (Sandbox Code Playgroud)

如果要使用所有数字和区分大小写的alpha [0-9A-Za-z],则有62个可能的值.这意味着你需要解决:

     62^y = 2000000
y*log(62) = log(2000000)
        y = log(2000000) / log(62)
        y = 3.5154313828...
Run Code Online (Sandbox Code Playgroud)

当然,您的URL中不能包含3.5个字符,因此您需要4.如果要更改用于URL的字符集,只需使用集合中的值数解决上述问题.

注意解决此等式假定固定长度的URL.对于可变长度的URL,请参阅Rob的答案.


Rob*_*ick 5

@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
Run Code Online (Sandbox Code Playgroud)

而且,正如你所说,3.5个字符是不可能的,因此需要4个字符.无可否认,在这种情况下,差异无关紧要.但是,在某些情况下(特别是在处理基数2时),这非常重要.