双向搜索的时间复杂度
Time Complexity of Bidirectional Search
给出连接两者的测试时双向搜索的时间复杂度
搜索是通过将前向新生成的状态与所有状态进行比较来完成的
向后方向生成的状态,一次一个。
如果要解析给定集合中的所有 n 个节点或状态,则在 n 个状态的每次迭代中,这将是 n*n 或 n^2。
但是,如果您只解析到当前节点的每个节点,那么它是所有节点到 n 的总和。
直到 n 的所有节点的总和将是线性的,特别是 1+2+3+...(n-1)+n = n(n+1)/2
你的申请我认为是后者,倒过来反而更好理解。考虑本次迭代的当前前向节点为 n,(n-1) 是向后的第一个节点,(n-2) 是向后的第二个节点,依此类推,直到 1,即向后的最后一个节点:
N + (n-1) + (n-2) + ... + 3 + 2 + 1 = n(n+1)/2
所以:
[a, b, c, d, e, f]
1,a: a,b,c,d,e,f
2,b: a,b,c,d,e,f
... this would be n^2
并且:
1,a: []
2,b: [a]
3,c: [a,b]
4,d: [a,b,c]
..... this would be linear as described above.
给出连接两者的测试时双向搜索的时间复杂度 搜索是通过将前向新生成的状态与所有状态进行比较来完成的 向后方向生成的状态,一次一个。
如果要解析给定集合中的所有 n 个节点或状态,则在 n 个状态的每次迭代中,这将是 n*n 或 n^2。
但是,如果您只解析到当前节点的每个节点,那么它是所有节点到 n 的总和。
直到 n 的所有节点的总和将是线性的,特别是 1+2+3+...(n-1)+n = n(n+1)/2
你的申请我认为是后者,倒过来反而更好理解。考虑本次迭代的当前前向节点为 n,(n-1) 是向后的第一个节点,(n-2) 是向后的第二个节点,依此类推,直到 1,即向后的最后一个节点:
N + (n-1) + (n-2) + ... + 3 + 2 + 1 = n(n+1)/2
所以:
[a, b, c, d, e, f]
1,a: a,b,c,d,e,f
2,b: a,b,c,d,e,f
... this would be n^2
并且:
1,a: []
2,b: [a]
3,c: [a,b]
4,d: [a,b,c]
..... this would be linear as described above.