【问题标题】:Brackets matching using BIT使用 BIT 匹配的括号
【发布时间】:2017-01-22 19:22:13
【问题描述】:

编辑:我试图解决一个 spoj 问题。这是问题的链接: http://spoj.pl/problems/BRCKTS

我可以想到两种可能的数据结构来解决问题,一种使用段树,另一种使用 BIT。 我已经使用分段树实现了该解决方案。我已经阅读了关于 BIT 的内容,但我不知道如何用它来做特定的事情(我在下面提到过)


我正在尝试检查仅包含() 的给定字符串中的括号是否平衡。 我正在使用 BIT(二进制索引树)来解决问题。 我遵循的程序如下:

我正在使用一个大小等于字符串中字符数的数组。 我将 ) 的 -1 和 ( 的 1 分配给相应的数组元素。

仅当满足以下两个条件时,字符串中的括号才平衡。

  • 整个数组的累计和为零。
  • 最小累积和为非负数。 即数组的所有前缀的累积和的最小值是非负的。

使用 BIT 检查条件 1 很简单。 我在检查条件 2 时遇到问题。

【问题讨论】:

  • 你选择了 BIT 方法还是做作业?
  • 有一个使用堆栈的更简单的解决方案。如果这是家庭作业并且您需要使用 BIT,请将其标记为这样。
  • 您可以在没有 BIT 的情况下执行此操作,方法是使用计数器迭代字符串。为每个( 加 1,为) 减 1,检查计数器是否低于零,并检查最后是否等于零。 (感谢疯狂)
  • 确实可行,并且可以从堆栈解决方案中得出:当您读取) 时,从堆栈中删除最顶部的(。如果没有,就没有解决方案。当您阅读 ( 时,将其推入堆栈。最后,堆栈必须为空。如果您也可以拥有[],这可以很容易地扩展到工作。
  • 不,这不是作业。我正在尝试通过在线法官解决问题。根据问题陈述,使用堆栈肯定会使我的解决方案超时。我已经使用分段树解决了这个问题。我可以发布问题的链接吗??

标签: algorithm binary-indexed-tree


【解决方案1】:

这是一个关于二叉索引树的非常好的教程:http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTrees,这是一个更直接但不太全面的教程:http://programmersdream.com/data-structure/binary-indexed-tree/

【讨论】:

    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多