【问题标题】:Write down all combinations of binary string [duplicate]写下二进制字符串的所有组合[重复]
【发布时间】:2014-08-19 15:34:57
【问题描述】:

我有一个长度为 5 的字符串。 字符串的每个元素都可以取两个值 0 和 1。

我想写下所有可能的排列。

例如:

0 0 0 0 0 
1 0 0 0 0
0 1 0 0 0
.
.
.
1 1 1 1 1 

这样的组合有 2^5 种。

我知道有一个命令叫combn,但我不知道如何处理每个数字可以取两个可能值的事实。

【问题讨论】:

  • 如果你想要一个快速的解决方案,你也可以试试data.tableCJ函数。即library(data.table); CJ(0:1, 0:1, 0:1, 0:1, 0:1)

标签: r


【解决方案1】:

也许不是最好的方法,但它确实有效:

> expand.grid(0:1, 0:1, 0:1, 0:1, 0:1)
   Var1 Var2 Var3 Var4 Var5
1     0    0    0    0    0
2     1    0    0    0    0
3     0    1    0    0    0
4     1    1    0    0    0
5     0    0    1    0    0
6     1    0    1    0    0
7     0    1    1    0    0
8     1    1    1    0    0
9     0    0    0    1    0
10    1    0    0    1    0
11    0    1    0    1    0
12    1    1    0    1    0
13    0    0    1    1    0
14    1    0    1    1    0
15    0    1    1    1    0
16    1    1    1    1    0
17    0    0    0    0    1
18    1    0    0    0    1
19    0    1    0    0    1
20    1    1    0    0    1
21    0    0    1    0    1
22    1    0    1    0    1
23    0    1    1    0    1
24    1    1    1    0    1
25    0    0    0    1    1
26    1    0    0    1    1
27    0    1    0    1    1
28    1    1    0    1    1
29    0    0    1    1    1
30    1    0    1    1    1
31    0    1    1    1    1
32    1    1    1    1    1

【讨论】:

  • expand.grid(rep(list(0:1),5))
  • 谢谢,好点,@akrun
  • 感谢您提供此解决方案。唯一的问题是,如果你想将它应用于更大的字符串,例如 20,它会非常慢。
  • @user2733997,我确信这有一些特殊功能(这就是为什么我写的可能不是最好的方法),只是想展示一个我想到的简单替代方案。
【解决方案2】:

您可以使用以下方法获得所有 2^5 = 32 个组合:

install.packages('gtools')
library(gtools)
permutations(2,5,v=c(0,1),repeats.allowed=TRUE)

【讨论】:

  • 这个解决方案对于更高的值要快得多,例如如果字符串的长度为 50。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2017-11-27
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多