下一个语法的复杂性是什么?

时间:2012-01-07 07:40:23

标签: algorithm parsing notation catalan

我正在开发一种广义分析算法,我正在使用下一条规则进行测试

S ::= a | SS

好吧,算法向我展示了为n a组成的字符串生成的所有树。

例如,下表显示算法使用的时间,因为a的数量

length  trees   time(ms)
1           1   1
2           1   1
3           2   2
4           5   2
5           14  2
6           42  2
7           132 5
8           429 13
9           1430    28
10          4862    75
11          16796   225
12          58786   471
13          208012  1877
14          742900  10206

我不知道O(Big O表示法)是我的算法。我如何衡量它,因为当然时间取决于三件事:

  1. 要解析的字符串的长度
  2. 语法复杂性
  3. 算法的性能

3 个答案:

答案 0 :(得分:1)

S可以匹配所有a的任何字符串。

任何具有n个叶子节点的二叉树都可以是一个解析树,这些树的数量由Catalan numbers给出。

答案 1 :(得分:0)

Big-O不是衡量运行时间的问题;那个人的分析。 Big-O是算法分析的问题,如果不看算法就不可能。

从广义上讲,将算法分解为基本操作,循环和递归调用。基本操作具有定义的定时(通常为O(1))。循环的时间是迭代次数乘以循环体的时间。递归比较棘手:您必须根据递归关系定义时序,然后求解显式解。查看process call tree可以提供有关显式解决方案的提示。

答案 2 :(得分:0)

我们不知道复杂性,因为你没有发布算法。但显然有可能你有一个非常糟糕的实现。问题不一定在算法中,但在语法本身中。一个合适的语法预处理器可以将它重写为更自然的形式

S ::= a | a S

处理效率会更高。