"Truncate" or "Delete/Vacuum Full" for deleting some of the table rows
If you don't have concurrent transactions that would prohibit you from getting an exclusive lock on the table, I would:


Select the (relatively few) surviving rows into a temporary table.
Make sure you have enough RAM available for the temporary tables (for this session only). Read about temp_buffers in this related answer:
Optimizing bulk update performance in PostgreSQL
Truncate the table.
Re-insert the survivors.


This way, views stay intact. They would prohibit you from dropping involved tables.
You also do not need any vacuuming, no dead rows at all this way. While being at it, you may want to ORDER BY your rows for the INSERT for optimized SELECT performance.

Here and here are closely related cases with more details on SO.