RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1050285
Accepted
4per
4per
Asked:2020-11-25 12:02:18 +0000 UTC2020-11-25 12:02:18 +0000 UTC 2020-11-25 12:02:18 +0000 UTC

C 和 C 在同一个键上的可能性有多大?

  • 772

给定。英文字母有26个字符。无论按什么顺序,我们都将它们排列在 33 个键的键盘上。

接下来,我们得到了西里尔字母的 33 个字符。众所周知,其中 12 种风格(实际上)А,В,Е,К,М,Н,О,Р,С,Т,У,Х与英语风格一致。我们随机将它们放在键盘上。

如何计算至少任何一对相似字符(例如,C和С)出现在同一个键上的机会?还有两对,三对等等?

алгоритм
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    Zealint
    2020-11-26T00:01:32Z2020-11-26T00:01:32Z

    让我们按某种顺序设置西里尔字母,将它们从 1 到 33 编号。让我们将拉丁字母从 1 到 26 编号。它们需要排列在 1 到 33 的位置。这样做的方法数是(这称为展示位置的数量)

          33!       33!
    N = --------  = --- = 1722880479922993352285356032000000
        (33-26)!     7!
    

    g(i)用将我们的 26 个拉丁字符放入 33 个西里尔字符的方法数来表示,以便至少匹配from 的字符。这个数字是1i

            (33-i)!  
    g(i) = -------- 
              7!     
    

    让我解释一下:也就是说,26-i我们可以将字母放在33-i位置上:

          (33-i)!         (33-i)!
    ------------------ =  -------
    ((33-i) - (26-i))!       7!
    

    现在所有这些都需要乘以from to的组合数,以考虑到12 中所有可能的字母:12ii

                                       / 12 \ 
    f(i) = g(i)*binomial(12,i) = g(i)*|      |
                                       \  i /
    

    现在我们使用包含-排除公式来确定我们有多少组合没有匹配:

    N - f(1) + f(2) - f(3) ... = 1193302430098089637938828023808000
    (сумма идёт до 12)
    

    也就是说,从所有可能排列的总数中,我们减去至少有一个匹配的那些,但是当我们通过乘以组合数来计算它们时,我们还考虑了 2、3 等字母的匹配。几次,他们需要加回来。好吧,等等,阅读链接上的理论。

    好吧,我们知道没有匹配项时的选项数量,以及所有选项的数量。我们一个一个地划分:

    0.6926205526174549408291876419168263634...
    

    现在让我们计算至少有一个匹配项时的组合数。这将

    f(1) - f(2) + ... = 529578049824903714346528008192000
    

    所有这些都根据包含异常的相同公式。将这个数字除以N我们得到:

    0.307379447382545059170812358083173636622...
    

    接下来,我们需要至少两个匹配项:

    f(2) - f(3) + f(4) - ... = 96923942874366595575419639808000
    

    和概率

    0.05625691625381857719282400555318999974
    

    嗯,等等:

    0 :: 0.6926205526174549408291876419168263634...
    1 :: 0.307379447382545059170812358083173636622...
    2 :: 0.05625691625381857719282400555318999974...
    3 :: 0.006243083746181422807175994446810000...
    4 :: 0.0004773463613454589132541130800...
    5 :: 0.0000266858967190572157781449844444...
    6 :: 0.0000011227795879505706512209777...
    7 :: 3.59e-8
    8 :: 8.687e-10
    9 :: 1.55e-11
    10:: 1.949e-13
    11:: 1.54e-15
    12 :: 5.88e-18
    

    谁想支持我的回答,也支持@Harry 的回答,在他的帮助下,我确信计算的正确性。

    • 19
  2. AnT stands with Russia
    2020-11-26T08:18:10Z2020-11-26T08:18:10Z

    @Zealint 已经建议了通过包含-排除方法的直接解决方案。

    也可以几乎沿着 [hard] 方式分解成不相容的事件,即计算恰好一个字母匹配、两个字母恰好匹配等的概率。最多匹配十二个字母的概率。那么期望的概率(“至少一个”)将等于这些不相容事件的概率之和。

    不失一般性,我们可以假设键上俄语字母的顺序已经固定。而且我们只能计算出我们感兴趣的拉丁字母的排列方式。我们假设我们已经完成了多达 33 个带有 7 个额外空格的拉丁字母表。拉丁字母和空格的“非俄文”字符统称为自由字母(总共有 21 个)。必须记住,所有填充空格都是相同的,仅在“空格顺序”上不同的排列被认为是相同的。

    假设我们有一个“规范”排列

    AВЕКМНОРСТУХБГДЁЖЗИЙЛПФЦЧШЩЪЫЬЭЮЯ
    ABEKMHOPCTYXDFGIJLNQRSUVWZ.......
                |<---------->|---------- "нерусские" буквы (14)
                              |<--->|--- пробелы (7)
                |<----------------->|--- свободные буквы (21)
    

    我们会说,在这种排列中,所有拉丁字母都站在它们的位置上。

    A字母并且只有字母在其位置的排列数是A多少?

    让我们使用subfactorial,它将为我们提供干扰的数量(没有元素在其位置的排列),并大胆地假设答案是!32。当然,这是一个错误的假设,因为

    1. 我们根本不想禁止自由字母落入排列中的任何地方,包括它们自己的。也就是说,“无序”的要求不应该适用于21个字母。

    2. 我们必须考虑到仅在“空间顺序”上不同的排列被认为是相同的。

    考虑到第一点,我们需要将值添加到!32

         C 21 1 * !31 + C 21 2 * !30 + ... + C 21 21 * !11

    其中C n k是二项式系数。

    这个总和中的每一项实际上是允许某个自由字母子集(乘数C n k)取代它们的位置,前提是所有其他字母不落入它们的位置(乘数与子因子)。(这里我们实际上也在对不相交的事件求和。)

    考虑到第二点,我们只需要将结果除以7!.

    更一般地说,我们可以把它写成广义扰动数的公式

         D(d, f, b) = (!d + C f+b 1 !(d+f+b-1) + C f+b 2 !(d+f+b-2) + ... + C f+b f+b !d) / b!

    其中d是被禁止落入其位置的元素的数量,f是可以落入其位置并且其顺序很重要的元素的数量(这些是“非俄罗斯”字母),b是可以落入其位置和顺序的元素并不重要(这些是空格)。

    例如,包含一个字母A且只有一个字母的排列数A是D(11, 14, 7)。

    使用这个公式,我们可以很容易地得到原问题的答案。

    恰好有1 个字母的排列数是

         C 12 1 D(11, 14, 7) = 442631885946180412726163791872000

    正好有2 个字母的排列数是

         C 12 2 D(10, 14, 7) = 77704405449651224014347472896000

    等等

         C 12 3 D (9, 14, 7) = 8546267921601441849709731840000
         C 12 4 D (8, 14, 7) = 65666179603187280579999999999999999999905280000
         C 12 5 D (7, 14, 7) = 3718214735786558729928704000
         C 12 DA ( 6 , 14) = 1593128414954741407456000
         C 12 7 d(5,14,7)= 521222222222222223400569286666666666668000 C
         12 8 D(4,14,7)= 12947249870414223360000      C
         12 9 D 9 D 9 D 9 D(3,14      )

    12 11 D(1, 14, 7) = 2554547108585472000
         C 12 12 D(0, 14, 7) = 10137091700736000

    最后一个值预计为21!/7!. 所有这些值的总和预计为529578049824903714346528008192000 - 您已经在@Zealint 的答案中看到了这个值。

    因此,我们获得了不相容事件的概率

    Ровно 1: 0.256914
    Ровно 2: 0.0451014
    Ровно 3: 0.00496045
    Ровно 4: 0.000381142
    Ровно 5: 2.15814e-05
    Ровно 6: 9.24686e-07
    Ровно 7: 3.0253e-08
    Ровно 8: 7.51342e-10
    Ровно 9: 1.38388e-11
    Ровно 10: 1.79797e-13
    Ровно 11: 1.48272e-15
    Ровно 12: 5.8838e-18
    

    以及“至少一个”案例的最终概率

    0.307379
    

    用这种不相交事件的概率求解的美妙之处在于,例如,现在您可以轻松回答匹配字母数量为奇数的概率是多少的问题。或者关于匹配字母的数量介于 4 和 7 之间的概率是多少。等等。

    PS 细心的读者会注意到,这里也隐藏了包含排除法——因为计算扰动次数(次因子)的公式,这种方法的耳朵明显伸出来。

    • 14
  3. Harry
    2020-11-25T22:35:51Z2020-11-25T22:35:51Z

    一般来说,理论上,我已经被缝合了,但我似乎已经准备好为实验回答:) 那么谁来写这个理论 - 如果它与我的结果有很大的不同,那么你需要认真解释我在哪里做了一个错误 ...

    根据十亿次计算实验,分布是 -

     0:  0.6926332
     1:  0.2569070   хотя бы :) 0.3073668
     2:  0.0450958   хотя бы :) 0.0504598
     3:  0.0049600   хотя бы :) 0.0053640
     4:  0.0003817   хотя бы :) 0.0004040
     5:  0.0000214   хотя бы :) 0.0000223
     6:  0.0000009
     7:  0.0000000
     8:  0.0000000
    

    好吧,很明显它几乎为零:)

    • 12

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5