【问题标题】:How many possible URLs can you make with the following characters?您可以使用以下字符创建多少个可能的 URL?
【发布时间】:2010-12-11 23:57:29
【问题描述】:

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

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

【问题讨论】:

    标签: math numbers friendly-url


    【解决方案1】:

    你通常可以在没有任何数学魔法的情况下解决这类问题。

    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 是你的答案 :)

    【讨论】:

      【解决方案2】:

      这不是阶乘问题,而是指数问题。

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

      x^y = 2000000
      

      如果您想使用所有数字和区分大小写的字母 [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 是固定长度的。对于可变长度 URL,请参阅 Rob 的回答。

      【讨论】:

        【解决方案3】:

        @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 时)它非常重要。

        【讨论】:

        • 关于可变长度 URL 的要点。但是,我会争辩说,对于固定长度的 URL,我的数学是正确的 ;) +1
        【解决方案4】:

        根据 HTTP/URI 规范,您还可以使用以下“未保留字符”:ALPHA / DIGIT / "-" / "." /“_”/“~”

        这会为您的基数添加额外的 4 个字符,因此

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

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

        【讨论】:

          【解决方案5】:

          您需要回答一些问题,例如您希望在您的系列中允许哪些类型的角色。

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

          区分大小写?这使您可以使用 62 个基数(4 个字符)

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

          【讨论】:

            【解决方案6】:

            可能的短 URL 数 =(ID 中可能的不同字符数)的(URL 中 ID 的长度)的幂

            例如,如果您只使用小写字符(其中有 26 个)并且您的网址看起来像 http://domain.com/XXXXX(对于您的 5 个字符的唯一 ID),那么您可以制作 26^5 = 11,881,376 个短网址.

            如果您使用大小写字母,则有 52 个,因此 52^5 = 380,204,032 个可能的短 URL,等等。

            【讨论】:

              猜你喜欢
              • 2010-10-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-13
              • 2011-08-20
              • 2014-09-20
              • 2013-12-25
              相关资源
              最近更新 更多