Perhaps a slightly simpler way would be to ‘run all algorithms simultaneously’ such that each one is slowed down by a constant factor. (E.g. at time t = (2x + 1) * 2^n, we do step x of algorithm n.) When algorithms terminate, we check (still within the same “process” and hence slowed down by a factor of 2^n) whether a solution to the problem has been generated. If so, we return it and halt.
ETA: Ah, but the business of ‘switching processes’ is going to need more than constant time. So I guess it’s not immediately clear that this works.
Perhaps a slightly simpler way would be to ‘run all algorithms simultaneously’ such that each one is slowed down by a constant factor. (E.g. at time t = (2x + 1) * 2^n, we do step x of algorithm n.) When algorithms terminate, we check (still within the same “process” and hence slowed down by a factor of 2^n) whether a solution to the problem has been generated. If so, we return it and halt.
ETA: Ah, but the business of ‘switching processes’ is going to need more than constant time. So I guess it’s not immediately clear that this works.