For implementing the seen_list, I swapped out the set data
structure and replaced it with a boost::dynamic_bitset data
structure, which earned me a 1.5x speedup over the old code.
Even so, the new data structure deals in indices of type
size_type, instead of type string, which means that since nodeIDs
are stored as strings, they must be convered to an integer using
a boost::lexical_cast each time the seen_list is accessed. I do
not know the cost of calling a lexical_cast to convert from string
to integer, but if it is costly enough then it will be worth it to
store the edge lists as an array of 64-bit integers rather than the
strings that they are now. This would also save a significant
amount of time by eliminating the call to boost::split in order
to parse out a node's individual neighbors. If the edge list is an
integer array then lookups would be much faster. Of course, since
the ramcloud API only provides the ability to read and write on
keys of type string, conversions from integer to string will be
necessary when reading and writing.