def orchestrate_logn(network, n): dp_table = {} for i in range(int(log2(n)) + 1): network = list(consolidate(sorted(path_double(network)))) cur_pow2 = 2 ** i if n & cur_pow2 == cur_pow2: #only store if pow2 bit is set in n dp_table[cur_pow2] = network if len(dp_table) == 1: return format_connections(dp_table[n]) return format_connections(reduce(merge, (dp_table[i] for i in sorted(dp_table.keys(), reverse = True))))
def orchestrate_logn(network, n): dp_table = {} for i in range(int(log2(n)) + 1): network = list(consolidate(sorted(path_double(network)))) cur_pow2 = 2**i if n & cur_pow2 == cur_pow2: #only store if pow2 bit is set in n dp_table[cur_pow2] = network if len(dp_table) == 1: return format_connections(dp_table[n]) return format_connections( reduce(merge, (dp_table[i] for i in sorted(dp_table.keys(), reverse=True))))
def should_sort(): assert [tabify('foo bar baz cux zip')] == list(format_connections( consolidate(tabify(['foo zip baz', 'foo bar cux']))))
def should_consolidate(): assert (list(format_connections(consolidate(tabify(['1 2 3', '1 4 5', '2 3 1', '2 5 6', '3 1 2'])))) == tabify(['1 2 3 4 5', '2 1 3 5 6', '3 1 2']) )
def orchestrate_O_of_n(network, n): for i in range(n): network = list(consolidate(sorted(one_hop(network)))) return format_connections(network)
def merge(onto, from_): return consolidate( sorted( extend_paths( sorted(combine(chain(onto, format_connections(from_)))))))
def should_consolidate(): assert (list( format_connections( consolidate(tabify(['1 2 3', '1 4 5', '2 3 1', '2 5 6', '3 1 2'])))) == tabify( ['1 2 3 4 5', '2 1 3 5 6', '3 1 2']))
def should_sort(): assert [tabify('foo bar baz cux zip')] == list( format_connections(consolidate(tabify(['foo zip baz', 'foo bar cux']))))
def merge(onto, from_): return consolidate(sorted(extend_paths(sorted(combine( chain(onto, format_connections(from_)))))))