Good night, I want to study by myself Theory of Computation and its three main areas: Computational Complexity, Automata Theory and Computability. I find Algorithms and Algorithm Analysis to be specially interesting (although I don't know exactly where this topic fits). I am starting to self-study Discrete Mathematics, which I know to be fundamental for understanding all these subjects. For Discrete Mathematics, I'm reading Kenneth Rosen's "Discrete Mathematics and Applications", which I find very didactic. My doubt is the following: How should I proceed for being able to study these subjects the right way? By "the right way", I mean in the correct order, without missing on any basic subjects. I want to be correctly introduced to everything starting from the basics. Are there any other mathematics requirements besides Discrete Mathematics? Is there still something "between" Discrete Math and Theory of Computation? Also, I have the book "Algorithms" by Dasgupta, Papadimitriou and Vazirani, but I also don't know where to fit it. My current background in Mathematics is basically: high-school math and some self-taught Calculus (limits, derivatives and basic integrals). I'm currently reading Leithold's "The Calculus with Analytic Geometry". Thank you in advance.