I'm working on a real-world problem where I have theoretical protein sequences and associated experimental protein masses. I'm attempting to decompose the experimental protein masses into all possible compomers of amino acids of known masses to identify all possible impurities which could result in the given experimental protein mass, defining an impurity as any compomer which differs from the theoretical protein sequence.
To solve this problem, I've framed it as a coin change problem, and implemented the algorithms outlined by Böcker and Lipták in their 2005 paper Efficient Mass Decomposition. However, the algorithm I've implemented identified all compomers, and scales exponentially with experimental mass size, quickly producing intractable results well within use-cases. Peptides of 1000 Da are found to have 48,530 compomers!
Because I don't just have the experimental peptide masses, but theoretical sequences too, I'm looking to use the experimental sequences to narrow the scope of output compomers, and hopefully, place an upper limit on the returned compomers. For example, if I had a theoretical sequence containing 2 As, 3 Cs, and 5 Ds, I would place the limit at double, so no returned compomer could have more than 4 As, 6 Cs, and 10 Ds. Is it possible to implement such an upper bound in the solution to the coin change problem? Is there a better, or more efficient way that I can be solving this problem?