Let me stand away from the (nevertheless interesting) discussion of implementing knapsack algorithms according to our particular position and, at risk of sounding like a middle management executive - think outside the box. Aka vague handwaving.
Taking Eyeonus' description of how it operates.
It takes the first item, which has the highest profit/ton, and tries to fill the hold with it.
If it does fill the hold, well and good and that's the end of the calculation. We have a full load of the most profitable item, move on. (If it considers anything else, then it's broken).
This is the commonest scenario, by a very long way, especially for smaller ships and only really a big deal on larger ships as more and more different items may be needed to fill the hold.
So in approximate terms, we only really an issue with multi-commodity trades on large hold ships.
Thus when talking about what is, or is not, optimal in such scenarios, is it really worth the time (human and CPU) to generate the holy grail of a 100% optimal solution? Especially when even if multi-commodity trade A-->B is suboptimal, the next single-commodity trade B-->C is likely to be optimal.
Furthermore, how many credits difference are we actually talking about in an approximated solution vs the optimal solution? Especially as this is a big ship problem, does the commander really care all that much if one awkward to calculate trade isn't quite 100%. I can't honestly say I've seen any other tool generate multi-commodity trades at all, so even a suboptimal solution is likely to be best of breed when it comes down to it.
Reducing the workload to an approximated solution seems then like a good idea, maybe limit the recursion depth as has been suggested may be a solution.
Alternatively, perhaps there are other approaches (and I really don't know what TD does under the bonnet, so I'm not claiming any of this is feasible) like reducing the scope of the problem. Break it into chunks, chances are that if you bung the first few most profitable things in the hold you've got a winner so do that and then if you really want to, worry about what space is left - maybe find a sweetspot where running Oliver's full algorithm on a smaller hold is worth it and approximate anything larger which is therefore going to be more complex.
I suppose the thrust of what I'm saying here is that perhaps obsessing over this perfect solution really honestly isn't a good way forward, even if you do find the algorithm, will it be complete in a timely fashion?
Instead, I do think that concentrating on finding the best approximation which gives a big speed boost to the application with the least loss of accuracy is the thing to do.
Put yourself into the average user's shoes - do you care more if
A: You make a few more credits from a perfect answer delivered slowly.
B: You get quick answers and can get on with the game.
In fact, thinking about playing the game generally - getting quick answers is more likely to generate credits than a lot of calculation to get perfect routes. Waiting for your trade tool to give perfectly calculated answers is time which could be spent trading - and time is money.