В качестве книги с доказательствами, написанной для студентов и аспирантов, я настоятельно рекомендую Introduction to Algorithms1 («Алгоритмы. Вводный курс») Кормена (Cormen), Лейзерсона (Leiserson), Ривеста (Rivest) и Стейна (Stein) (этих авторов обычно объединяют под аббревиатурой CLRS).
http://www.whatwilliamsaid.com/books/ вы найдете тесты для самопроверки к каждой главе.
Важным навыком в программировании является умение оптимизировать только те части программы, которые необходимо оптимизировать