[数据结构和算法]状态树的问题

原创 2016年03月10日 11:29:13

问题

给定一个正整数 n, 求输出符合期望的所有的 左右括号的组合。要求,左括号不小于右括号。当 n = 3 的时候,输出值为:

["((()))", "(()())", "(())()", "()(())", "()()()"]

分析

这是问题可以抽象成状态树:
* 节点: 在 x 的时候(0 <= x <=n), 此时的左右括号的个数为 (x, y)
* 边: (x,y) 到 (x +1, y) 或者 (x, y+1) 两个点的运算
* 约束条件: x >= y ; 当 x == y 时, (x , y +1 ) 不合法
* 起点和终点: (0, 0) -> (n, n)

因为本题需要得到“全部解”,所以使用深度搜索。

代码

##
#给定一个正数 n , 输出所有合法的左右括号的组合,比如 n = 3,
# ((()))  ()()() (()()) 
##


def solution(n)
  result = []
  help(n, 0, 0, "", result)
end

def help(n, x, y, now, items)
  if y == n
    items << now
    return
  end

  if x < n
    help(n, x + 1, y, now + "(", items)
  end

  if x > y
    help(n, x, y + 1, now + ")", items)
  end

  return items
end

p solution(3)

代码说明

  1. 结束条件是 y == n ,因为 x >= y , 所以当 y == n的时候,其实已经到了终点
  2. 优先考虑 x, 当 x < n 的时候,先增加左括号
  3. 但 x > y 的时候,增加右括号

状态树搜索算法-------------抽象问题与建模思想(三只水桶分水问题)

今天看《算法的乐趣》第五章,作者提出问题:把三桶个水桶等分8升水的问题,有8,5,3L的水桶分8升水,最后的结果要在8L水桶和5L水桶中分别有4L水。 首先要定义问题的解,并分析解空间范围和拓扑结构,...
  • jjfly999
  • jjfly999
  • 2016年04月05日 00:35
  • 1678

算法笔记(III) 状态空间搜索

动态规划 在一般的算法书中,动态规划总是一个复杂的算法设计技巧。在几种普遍涉及的算法设计技巧:穷举、贪心、回溯、分治、动态规划中,动态规划往往是最复杂技巧性最强的一个技巧,但是常常最有效的算法,...
  • lilongduzhi
  • lilongduzhi
  • 2017年05月09日 20:45
  • 632

状态树搜索算法-------------抽象问题与建模思想(三只水桶分水问题)

今天看《算法的乐趣》第五章,作者提出问题:把三桶个水桶等分8升水的问题,有8,5,3L的水桶分8升水,最后的结果要在8L水桶和5L水桶中分别有4L水。 首先要定义问题的解,并分析解空间范围和拓扑结构,...
  • jjfly999
  • jjfly999
  • 2016年04月05日 00:35
  • 1678

androidView树的绘图流程

整个View树的绘图流程 是在ViewRoot.Java类的performTraversals()函数展开的 performTraversals()执行过程 判断是否需要重新计算视图大小(m...
  • zhaoyazhi2129
  • zhaoyazhi2129
  • 2016年05月10日 19:24
  • 1192

JTree---刷新树,保存树的刷新前的展开状态

package test; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.ev...
  • CSDN184580097
  • CSDN184580097
  • 2014年04月22日 21:04
  • 1772

详细了解哈夫曼树和背包问题

写在前面 最近在疯狂复习数据结构和算法,虽然看完了一部完整的视频。但是转眼看看自己手中的《剑指Offer》里面还是不是很清楚。。。而且最近也突然觉得自己知识和别人比起来就是一个渣渣。各种被人家吊打。。...
  • qq_28466365
  • qq_28466365
  • 2017年04月13日 10:28
  • 1577

Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为

Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为1.动画混合树        混合树表示多个状态的混合调用,一般根据某些参数来实现这些动画状态之间的混合与切换,根据参数的个数...
  • wkhabc
  • wkhabc
  • 2016年08月13日 23:54
  • 4674

算法设计分析:解剖回溯法

有这样几类问题: 建立数学模型,在有限时间内,用解析的方法求解 建立数学模型,但在有限时间内,用数学解析的方法求解困难,只好用搜索或模拟来求解,常见方法有:  穷举  深度优先搜索方法  广...
  • a469770982
  • a469770982
  • 2014年05月26日 16:30
  • 512

skyline 6.6.1 javascript实现遍历树,然后获取图层树中的属性数据

这几天开始研究skyline第一实例就是,单机按钮然后,显示某个图层的数据,虽然实现了功能,但是对这种显示方式,不是很认可的,希望skyline可以改进,下面说一下实例 1.首先用TerraExplo...
  • huyanliang
  • huyanliang
  • 2017年06月15日 14:08
  • 804

数据结构中各种树

1. 二叉树 2. 二叉查找树 3. 平衡二叉树 3.1 平衡查找树之AVL树 3.2 平衡二叉树之红黑树 4. B树 5. B+树 6. B*树 7. Trie树   数据结构中有很多树的结构,...
  • qq445803843
  • qq445803843
  • 2016年07月23日 23:25
  • 989
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构和算法]状态树的问题
举报原因:
原因补充:

(最多只允许输入30个字)