(Untitled)

Dec 22, 2010 00:32

Quote of the day:

A single Nehalem chip today could easily generate four gigabytes per second of new garbage when running a classic enterprise workload.The text pointed by the link is very informative, though. It's about the Azul JVM and how they exploit virtual memory to create a "Pause less" concurrent garbage collector (truly pauseless in the ( Read more... )

Leave a comment

Comments 22

_qwerty December 22 2010, 11:20:32 UTC
Это бородатая задача. См. обход двоичного графа методом обращения указателей у Д.Кнута.

Есть другой вариант, аналогичный обходу лабиринта по правилу левой руки, применимый к любому ациклическому связному графу.

void traverse_binary_tree( TreeNode* node ) {
#define UndefNode ((TreeNode*)-1)
TreeNode* prev = UndefNode;
do {
TreeNode* tmp;
if( node ) {
do_something( node );
// Rotate pointers with carry
tmp = node->Sons[0];
node->Sons[0] = node->Sons[1];
node->Sons[1] = prev;
prev = tmp;
}
// Swap
tmp = node; node = prev; prev = tmp;
} while( node != UndefNode );
#undef UndefNode
}

При условии выравнивания размещения узлов по четным адресам можно неинтересным и некрасивым способом обходить произвольные связные графы.

Reply


Leave a comment

Up