py4cytoscape
py4cytoscape copied to clipboard
Remove n^2 loops
There are a number of functions that contain checks for a node or edge list being contained within a network. For very large networks and very large lists, this becomes an n^2 operation. I recently verified that for a million node network, the check in load_table_data() took longer than 2 days (before I gave up).
The general pattern is to create a comprehension and then test whether True or False is in the comprehension.
For example:
test_present = [x in all_names for x in node_suids]
if not False in test_present:
return node_suids
These can be found in:
py4cytoscape_utils:node_suid_to_node_name()
py4cytoscape_utils:edge_suid_to_edge_name()
py4cytoscape_utils:_item_to_suid()