作为一个关于这段代码的一小部分的原始问题的后续行动,我决定询问一下后续内容,看看你能做得更好,然后我们到目前为止所做的更好。树型迭代器,你可以进一步优化它吗?
下面的代码迭代二叉树(左/右=子/下)。我相信这里有一个条件较少的空间(down
布尔值)。最快的答案获胜!
- 的
cnt
语句可以是多条语句所以让我们确保这个只出现一次 - 的
child()
和next()
成员函数约30倍的hasChild()和hasNext()操作一样慢。 - 保持迭代< - 由于呈现的递归解决方案速度更快,因此放弃了此要求。
- 这是C++代码
- 节点的访问顺序必须保持原样,如下例所示。 (首先打击父母,然后是孩子,然后是'下一个'节点)。
- BaseNodePtr是一个boost :: shared_ptr,因此赋值很慢,避免了任何临时的BaseNodePtr变量。
目前这段代码需要5897ms访问测试树中的62200000个节点,调用这个函数200,000次。
void processTree (BaseNodePtr current, unsigned int & cnt)
{
bool down = true;
while (true)
{
if (down)
{
while (true) {
cnt++; // this can/will be multiple statesments
if (!current->hasChild()) break;
current = current->child();
}
}
if (current->hasNext())
{
down = true;
current = current->next();
}
else
{
down = false;
current = current->parent();
if (!current)
return; // done.
}
}
}
这是什么,一个作业问题?为什么这种奇怪和任意的限制? – 2009-08-19 20:11:42
这实际上不是家庭作业。没有任何限制是任意的。我正在尝试在我的应用程序中构建最快的树型迭代器函数。这是我到目前为止所提出的。我想看看它是否可以做得更好。 – Ron 2009-08-19 20:15:13
嗯...也许我可以想出一个更好的,但我不想花费所有的时间试图在你的限制内解决这个问题。 :-)无论如何,我们可能无法帮助你,因为你需要根据自己的个人需求来测试这种情况。 – Eli 2009-08-19 20:20:48