Hi Andrew and Noel,

Thank you for the inspiring answers!

Andrew: Sorry I didn't make it clear, but 1/2 of the time is only for a random 
job I tested and I don't know the scaling of it. Its cost may grow faster than 
the searching algorithm. I think it is beneficial to know the formal time 
complexity in this sense. But I agree that it is mostly useful when thinking 
about large N. I may have to just measure the actual scaling and deal with it.

Noel: That's a brilliant idea! I do think most of the time is wasted on 
canonicalizing the same graph in my code. I will give it a try. On another 
note, the purpose of canonicalization in my code is to eliminate duplicates in 
my reaction path network. Is there a better way to do it? Molecules in my code 
are represented by bond-electron matrix. A naive approach would be to sort rows 
in both matrices and compare them row by row. (I think this takes O(N^2*logN))

Best,
Xianghai

On Fri, Nov 2, 2018 at 3:31 AM Noel O'Boyle 
<baoille...@gmail.com<mailto:baoille...@gmail.com>> wrote:
First of all, I'd recommend using the development code rather than the latest 
release. Also, ensure that hydrogens are suppressed. You may also consider 
trying to avoid multiple canonicalisations of the same graph by just writing 
out a non-canonical SMILES, and only at the end collating them and 
canonicalising.

While I agree with Andrew, it is also true that Open Babel's canonicalisation 
implementation is slow. This is partly due to the fact that we calculate all of 
the graph invariants up-front rather than lazily to split ties. In particular, 
we calculate the pairwise distance of every atom from every other atom (as far 
as I remember). This is O(N**2).


Regards,
- Noel

On Fri, 2 Nov 2018 at 08:02, Andrew Dalke 
<da...@dalkescientific.com<mailto:da...@dalkescientific.com>> wrote:
On Nov 2, 2018, at 01:33, Xianghai Sheng 
<xsh...@ucmerced.edu<mailto:xsh...@ucmerced.edu>> wrote:
> I am trying to figure out the time complexity (Big O) of converting from 
> OBMol to canonical smiles.

I don't think that's a useful way to think about your problem.

Graph canonicalization is "at least as computationally hard as the graph 
isomorphism problem." https://en.wikipedia.org/wiki/Graph_canonization , and 
graph isomorphism is believed to be quasi-polynomial.

That said, I believe the actual algorithm Open Babel uses may have exponential 
time for some graphs.

However, most molecular graphs don't reach the worst-time behavior.

Furthermore, time complexity is mostly useful when thinking about large N. 
Molecules typically have small N, and there may be lower-order terms which 
dominate the times for small N.

If you are interested in the topic of graph canonicalization algorithms in 
general, you might start with the nauty papers; see 
http://pallini.di.uniroma1.it/

> I want to know this because getting canonical smiles takes up half of the 
> running time of my reaction path searching program.

How would knowing the time complexity help you?

While this may be obvious, if canonicalization takes 1/2 the time, then you'll 
only get 2x speedup even if that time goes to 0. How much work are you willing 
to do for a 2x speedup?

Might it be possible to do about the same amount of work to parallelize your 
algorithm? For example, if your reaction path search generates a set of nodes 
which must all be canonicalized in order to evaluate them, then you can do all 
of those canonicalizations in parallel.

Cheers,

                                Andrew
                                
da...@dalkescientific.com<mailto:da...@dalkescientific.com>




_______________________________________________
OpenBabel-discuss mailing list
OpenBabel-discuss@lists.sourceforge.net<mailto:OpenBabel-discuss@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/openbabel-discuss
_______________________________________________
OpenBabel-discuss mailing list
OpenBabel-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openbabel-discuss

Reply via email to