我正在开发一种广义分析算法,我正在使用下一条规则进行测试
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表示法)是我的算法。我如何衡量它,因为当然时间取决于三件事:
答案 0 :(得分:1)
S可以匹配所有a的任何字符串。
任何具有n个叶子节点的二叉树都可以是一个解析树,这些树的数量由Catalan numbers给出。
答案 1 :(得分:0)
Big-O不是衡量运行时间的问题;那个人的分析。 Big-O是算法分析的问题,如果不看算法就不可能。
从广义上讲,将算法分解为基本操作,循环和递归调用。基本操作具有定义的定时(通常为O(1))。循环的时间是迭代次数乘以循环体的时间。递归比较棘手:您必须根据递归关系定义时序,然后求解显式解。查看process call tree可以提供有关显式解决方案的提示。
答案 2 :(得分:0)
我们不知道复杂性,因为你没有发布算法。但显然有可能你有一个非常糟糕的实现。问题不一定在算法中,但在语法本身中。一个合适的语法预处理器可以将它重写为更自然的形式
S ::= a | a S
处理效率会更高。