我的算法的运行时间是多少?

时间:2017-07-22 18:50:56

标签: algorithm tree binary-search-tree trie prefix-tree

我正在编写一个算法,该算法将首先获取各种端点的配置文件及其相关方法,如下所示:

/guest guestEndpoint
/guest/lists listEndpoint
/guest/friends guestFriendsEndpoint
/guest/X/friends guetFriendsEndpoint
/guest/X/friends/X guestFriendsEndpoint
/X/guest guestEndpoint
/X/lists listEndpoint
/options optionsEndpoint

X这里代表一个通配符,因此任何字符串都与此匹配。 算法将此作为输入并构建一个树,每个节点代表/之间的一个标记。每个叶子都是有效的端点。

然后,当用户传入类似guest/abc/friends的内容时,它将从根开始遍历树,然后查找连接到根的guest节点,如果存在则转到节点{{1如果guest此处的访客将拥有guest个节点,那么如果wildcard与任何abc的节点都不匹配,但有{ {1}}节点出现它将转到guest。然后从wildcard看它是否有一个wildcard节点,如果有的话去那里。然后,如果wildcard是叶节点,它将返回相应的方法。

这种算法有意义吗?我想知道查找的运行时是什么。我认为它是O(n),其中n是传入的参数中的令牌数。

这是我将根据上面的输入构建的图形的图像。每个菱形表示端点方法。 enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

最差查找时间为O(E + N),其中E为数字,如果边和N为节点数。因为我们不知道每个级别有多少个节点。因此,通过算法,您可以通过执行级别搜索找到所需序列中的第一个节点,因为您没有任何参数可以检查是否需要通过所需的路径。 (我知道每次下降一级时节点的数量会减少,但在这种情况下有多少节点不确定) 它甚至不是n阵列。

Wild Card无法帮助减少最坏情况下的时间复杂度,并且无法知道树的最佳情况。通配符检查需要一段时间,并且在运行时不会计算。

现在算法看起来有点混乱,当你有两个选项时你会做什么

1)你有自然匹配的节点 2)你有通配卡节点。

在同一水平上,你会去哪里? 假设你先遇到你的方向。但是,如果它不是您在最后一个节点知道的实际路径,那么您可以回溯它。为避免这种情况,您将在BFS上保留每个级别的可用路径数,并进行搜索。 因此,如果处理完所有情况,最坏情况时间复杂度将为O(E + N)。