Il mio consiglio è di iniziare a scrivere gli algoritmi "giusti" (possibilmente disaccoppiando interfaccia ed implementazione, in modo da poterli cambiare internamente in un secondo tempo senza impazzire), quindi effettuare un profiling del programma, in modo che spuntino fuori i veri colli di bottiglia su cui ti devi concentrare per migliorare globalmente le prestazioni.