我遇到算法问题,我不知道怎么做以及如何调用它(它有没有具体名称?)
例如,如果我有这个序列:
000 CASE_01
001 CASE_02
010 CASE_03
011 CASE_02
100 CASE_02
101 CASE_01
110 CASE_01
111 CASE_01
我想用以下内容转换它:
000 CASE_01
0-1 CASE_02
010 CASE_03
100 CASE_02
1-1 CASE_01
11- CASE_01
我称之为通配符,因为我认为这是最正确的方式...... 它们不一定有3位,你必须使用 n 位
如果我只有psudo代码,我可以把它写成任何语言(以我的方式使用Python)
答案 0 :(得分:1)
下面的代码为输入中遇到的位数生成所有可能的通配符字符串(例如--
,-0
,-1
,0-
,{{1} },00
,01
,1-
和10
2位),还会创建数字被反转且通配符变为1的模式(所以通配符11
具有模式0-1
),并且掩码中数字变为1且通配符变为0(因此通配符110
具有掩码0-1
)。
然后输入中的二进制数与模式进行异或,并使用掩码进行AND-ed以检查它们是否适合某个通配符。如果通配符具有所需数量的匹配数字(2 ^ number_of_wildcards),则会将其添加到输出中,并从输入中删除匹配的数字。
运行代码片段以查看使用示例输入的算法,我添加了第四个具有更大二进制数的案例。
101

答案 1 :(得分:0)
首先,将输入转换为每个案例的数字列表
id = CASE_01,nums = [000,101,110,111]
id = CASE_02,nums = [001,011,100]
id = CASE_03,nums = [010]
然后,对于每个案例:
Iterate over number of possible wildcards down to 1 // e.g. 3, 2, 1
{
Iterate over every position of the other digits // e.g. 2: x--, -x-, --x
{
Iterate over every value of other digits // e.g. x--: 0--, 1--
{
Iterate over every wildcard value // e.g. 0--: 000, 001, 010, 011
{
If all combinations are present in this case
{
Store result // "CASE_NN 0--"
Remove matching numbers from case // 000, 001, 010, 011
}
}
}
}
}
这看起来比它复杂,所以我将通过你的例子运行算法:
CASE_01:000,101,110,111
3个通配符需要8个匹配=>2张通配符需要4场比赛 职位:x - , - x - , - x
模式:0 - ,1- - , - 0 - , - 1 - , - 0, - 1
没有模式匹配所需的4个数字1个通配符需要2个匹配
位置:xx-,x-x,-xx
模式:00-,01-,10-,11-,0-0,0-1,1-0,1-1,-00,-01,-10,-11
模式11-有2个匹配:110,111
存储11- CASE_01
并删除110,1110个通配符需要1个匹配
职位:xxx
模式:000,001,010,011,100,101,110,111
模式000有1匹配:000
存储000 CASE_01
并删除000
模式101有1个匹配:101
存储101 CASE_01
并删除101CASE_02:001,011,100
3个通配符需要8个匹配=>不可能 2个通配符需要4个匹配=>1个通配符需要2个匹配
位置:xx-,x-x,-xx
模式:00-,01-,10-,11-,0-0,0-1,1-0,1-1,-00,-01,-10,-11
模式0-1有2个匹配:001,011
存储0-1 CASE_02
并删除001,0110个通配符需要1个匹配
职位:xxx
模式:000,001,010,011,100,101,110,111
模式100有1个匹配:100
存储100 CASE_02
并删除100CASE_03:010
3个通配符需要8个匹配=>不可能 2个通配符需要4个匹配=>不可能 1个通配符需要2个匹配=>0个通配符需要1个匹配
职位:xxx
模式:000,001,010,011,100,101,110,111
pattern 010有1匹配:010
存储010 CASE_03
并删除010<强> RESULT 强>
11- CASE_01
000 CASE_01
101 CASE_01
0-1 CASE_02
100 CASE_02
010 CASE_03