我对一个庞大的查询是多么困惑?

时间:2018-01-06 07:58:59

标签: algorithm

任何10字符串的子序列如果格式为1010...1010连接任意次数),则称为humongous。

例如,10个字符串110恰好包含2个巨大的子序列,而1010恰好包含4个巨大的子序列(使用索引{1, 2}, {3, 4}, {1, 4}, {1, 2, 3, 4}形成)。

请不要误会我问这个问题的解决方案,我只是问10010有多少重要的后续序列以及它们的索引是什么。

2 个答案:

答案 0 :(得分:1)

(我认为这是一个家庭作业问题,要求一个程序来计算大量的子序列。我在这里使用这里描述的折衷方案:How do I ask and answer homework questions?。即我没有给出一个完整的解决方案。在代码中分配,但提出一种思考/解释的方式似乎是合理的,并且应该允许继续做作业。)

这个“巨大”的定义对我来说是未知的。我们假设该定义是由教师定义的,只适用于这个问题 似乎'交替的“1”和“0”的任何子序列以“1”开头并以“0”结尾,这将更像是一个定义,而不是基于例子的。

(我也不会将{1,4}描述为子序列。它不是连续的 但这似乎只是我的观点,正如Dukeling所引用和支持的那样。)

考虑不需要连续的子序列,例如{1,3}也将被视为示例“1010”的后续序列,虽然是非常大的(“11”)。

通过对定义的解释,“10010”的大量子序列的计数将是

{1,2}
{1,3}
{1,5}
{4,5}
{1,2,4,5}
{1,3,4,5}

答案 1 :(得分:0)

这太有趣了。以下是您问题的编码答案:

10010有多少个巨大的子序列?点击查看!

function countHumongousSubs(s){
  let count_subs_ending_in_one = 0;
  let count_subs_ending_in_zero = 0;
  
  let i = 0;

  while (s[i]){
    if (s[i] == '1')
      count_subs_ending_in_one += 1 + count_subs_ending_in_zero;
    else
      count_subs_ending_in_zero += count_subs_ending_in_one;
    i++;
  }
  
  return count_subs_ending_in_zero;
}

console.log(countHumongousSubs('10010'));
/* https://stackoverflow.com/users/1447675/nina-scholz */
.as-console-wrapper { max-height: 100% !important; top: 0; }

他们的指数是什么?点击查看!

function humongousSubIndices(s){
  let indices_ending_in_one = [];
  let indices_ending_in_zero = [];
  
  let i = 0;
  
  while (s[i]){
    if (s[i] == '1'){
      indices_ending_in_one =
        indices_ending_in_one.concat(
          indices_ending_in_zero.map(x => x.concat([i+1]))
        );
        
      indices_ending_in_one.push([i+1]);
      
    } else {
      indices_ending_in_zero =
        indices_ending_in_zero.concat(
          indices_ending_in_one.map(x => x.concat([i+1]))
        );
    }
    
    i++;
  }

  return indices_ending_in_zero;
}

console.log(JSON.stringify(humongousSubIndices('10010')));
/* https://stackoverflow.com/users/1447675/nina-scholz */
.as-console-wrapper { max-height: 100% !important; top: 0; }