From what I've read, the ideal method of terminating charge is the -dV/dt method. This is where the cell voltage actually drops a bit as the cell reaches full charge. This is difficult or impossible to detect at charge currents below 0.5C, so in order to do this you need to charge at 0.5C or higher. Done properly, you can charge pretty quick and with relatively low heat.
Unfortunately, I had quite poor luck building a charger to do this, specifically with 3S1P Eneloop AAAs. It kept detecting drops in the voltage well below full charge. When I increased the threshold a little, it started missing the real one and overcharged cells. I ended up going with 0.1C/16H charge and everything seemed okay. Never ran high cycles on them this way though.