<p>Having &quot;a very poor memory&quot; will make studying anything extra difficult, but 1) there are <a href="https://www.lifehack.org/804141/brain-exercises-for-memory" rel="nofollow noreferrer">exercises to improve your memory</a>, and 2) <a href="https://en.wikipedia.org/wiki/Emotion_and_memory" rel="nofollow noreferrer">(emotional) motivation is considered to help memorizing things</a>. I suspect that sticking to &quot;dry knowledge collections&quot; to study did not and will not help your memorization process, and might be part of the problem: there are several non traditional studying options for topics in theoretical computer science in general and algorithm design and analysis in particular which you might want to give a try:</p>
<ol>
<li><p>Participating in programming competitions (at your university or online), and studying solutions of past contests, might be challenging enough to boost your memory abilities, and &quot;dry knowledge collections&quot;. See for instance</p>
<ul>
<li>the <a href="https://acm.cs.umd.edu/icpc/" rel="nofollow noreferrer">ACM's International Collegiate Programming Contest</a>, and</li>
<li>the ones linked in the <a href="https://www.geeksforgeeks.org/competitive-programming-a-complete-guide/" rel="nofollow noreferrer">Geeks for geeks's guide of competitive programming</a>.</li>
</ul>
</li>
<li><p>The books &quot;<a href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming" rel="nofollow noreferrer">The Art of Computer Programming</a>&quot;, from Donald Knuth, might be a good fit for a self-paced learner as you seem to see yourself. As books go, it is quite atypical in that it reads (even) more as a set of lecture notes (than other books), with extensive examples. Donald Knuth is considered to be one of the father of theoretical computer science: you will be learning from the best! The books are for sale but my students usually easily find digital versions online.</p>
</li>
<li><p>I would not recommend studying from &quot;very dry knowledge collections&quot; if you have memory problems, but if it is indeed what you need, you could obviously read a combination of</p>
<ul>
<li>general articles on Wikipedia, starting with the one defining <a href="https://en.wikipedia.org/wiki/Theoretical_computer_science" rel="nofollow noreferrer">Theoretical Computer Science</a> and following the links from there, and of</li>
<li>scientific articles from journals and <a href="https://doi.org/10.4230/DagRep.8.7.44" rel="nofollow noreferrer">conference proceedings</a>, starting from a recent one on a topic of interest to you (e.g. recent research on a topic you might have seen in discrete math, such as <a href="https://www.academia.edu/48716818/LRM_Trees_Compressed_indices_adaptive_sorting_and_compressed_permutations" rel="nofollow noreferrer">Merge Sort</a>), and identifying <a href="https://doi.org/10.1016/j.tcs.2013.10.019" rel="nofollow noreferrer">older ones</a> introducing the concepts you are not familiar with, such as a Ph.D. thesis (e.g.  <a href="https://www.academia.edu/778386/Compressed_Data_Structures_based_on_Adaptive_Algorithms" rel="nofollow noreferrer">Compressed Data Structures based on Adaptive Algorithms</a>), a survey (e.g. <a href="https://doi.org/10.1145/146370.146381" rel="nofollow noreferrer">A survey of Adaptive Sorting Algorithms</a> ) or an overview (e.g.  <a href="https://doi.org/10.1016/0166-218X%2893%29E0160-Z" rel="nofollow noreferrer">A framework for adaptive sorting</a>), going back in time as much as you need to insure mastery (e.g. as far as <a href="https://archive.org/details/B-001-001-250" rel="nofollow noreferrer">Donald Knuth</a>'s (him again!) introduction of <a href="https://www.youtube.com/watch?v=dK1eOTRlLx8" rel="nofollow noreferrer">Adaptive Merge Sort</a>!)</li>
</ul>
</li>
</ol>
<p>I hope it helps (apologies if I cited many of my own articles: they did seem relevant as examples!).
Welcome to cstheory SE!</p>

CC BY-SA 4.0
2022-10-20T18:51:08.453Z
I appreciate your advice and resources. My answer to your conjecture is that I have a terrible memory and poor concentration skills. In my past reading of computer textbooks (e.g. DBMS), these textbooks tend to write a lot of sentences to help the reader understand the theory, and it was a disaster for me to divide my already inadequate attention to these sentences. So I will tend to be very dry notes, which allows me to more efficiently use my limited memory and ability to focus. Again, thank you a lot for your help!
Allonsy Jia
CC BY-SA 4.0
2022-10-20T11:27:31.207Z
2022-12-26T07:17:48.230Z
2022-12-26T07:17:48.230Z
J.y B.y
<p>I am a college student majoring in Computer Science, before my college, I played OI for about 2 years. I want to learn tcs cuz I like it. Among the many tcs fields, I am most interested in algorithms. However, I need some suggestions about the learning route.</p>
<p><strong>My advantages:</strong></p>
<p>I am familiar with most of the basic algorithms and have taken discrete math.</p>
<p><strong>My disadvantages:</strong></p>
<p>For some personal reasons, I can't stick to large passages of text, so books can't be my first choice (I've hardly ever finished any book in its entirety). I also have a very poor memory, which led me to not do very well in discrete math (because it was a large part of the exam).</p>
<p>With the above information, can anyone give me some advice on where I should start learning tcs? Are there any recommended materials?</p>
<p>Thank you in advance to all those who helped me.</p>

CC BY-SA 4.0
2022-10-20T03:51:35.837Z
There are several algorithms and tcs courses from beginning to advanced whose videos are available publicly. For instance you can check out Jeff Erickson's course at UIUC this semester. https://courses.engr.illinois.edu/cs473/fa2022/. You can try to solve the home works. You can also check out Ryan O'Donell's videos on several topics. http://www.cs.cmu.edu/~odonnell/
Chandra Chekuri
CC BY-SA 4.0
2022-10-20T06:17:54.140Z
Hi Chandra, I can't watch courses and books because of medical reasons, I prefer very dry knowledge collections, such as lecture notes, do you have any recommendations in this regard, thanks.
Allonsy Jia
CC BY-SA 4.0
2022-10-20T10:45:32.007Z
Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.
Community
CC BY-SA 4.0
2022-10-20T10:50:08.957Z
Could you precise which distinction you make between "books" and "lecture notes"?
Most TCS books started as lecture notes and end up used as course material for courses in TCS (and in general books are much more "dry knowledge collections" than lecture notes!).
J.y B.y
CC BY-SA 4.0
2022-10-20T10:54:11.493Z
What is "OI" and how is playing a game preparing you to learn Algorithms and Theoretical Computer Science?
J.y B.y
CC BY-SA 4.0
2022-10-20T18:43:33.947Z
@J..yB..y Hi there, OI is Olympic in Informatics: https://en.wikipedia.org/wiki/International_Olympiad_in_Informatics. In my college experience, lecture notes tend to be more concise than reference books, which is why I say this.
Allonsy Jia
CC BY-SA 4.0
2022-12-26T10:33:37.827Z
You might get benefits from the website https://www.codingame.com/, which gives you concrete challenges and nice graphical interfaces to guide you through many algorithmic concepts.
Denis
<ds.algorithms>
Where should I start?
Allonsy Jia
# Where should I start?

(Asked by: username_0 on 2022-10-19)

I am a college student majoring in Computer Science, before my college, I played OI for about 2 years. I want to learn tcs cuz I like it. Among the many tcs fields, I am most interested in algorithms. However, I need some suggestions about the learning route.

**My advantages:**

I am familiar with most of the basic algorithms and have taken discrete math.

**My disadvantages:**

For some personal reasons, I can't stick to large passages of text, so books can't be my first choice (I've hardly ever finished any book in its entirety). I also have a very poor memory, which led me to not do very well in discrete math (because it was a large part of the exam).

With the above information, can anyone give me some advice on where I should start learning tcs? Are there any recommended materials?

Thank you in advance to all those who helped me.

**Tags:** ds.algorithms

> **Comments:**
> **username_1**: There are several algorithms and tcs courses from beginning to advanced whose videos are available publicly. For instance you can check out Jeff Erickson's course at UIUC this semester. https://courses.engr.illinois.edu/cs473/fa2022/. You can try to solve the home works. You can also check out Ryan O'Donell's videos on several topics. http://www.cs.cmu.edu/~odonnell/  
> **username_0**: Hi Chandra, I can't watch courses and books because of medical reasons, I prefer very dry knowledge collections, such as lecture notes, do you have any recommendations in this regard, thanks.  
> **username_2**: Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.  
> **username_3**: Could you precise which distinction you make between "books" and "lecture notes"? Most TCS books started as lecture notes and end up used as course material for courses in TCS (and in general books are much more "dry knowledge collections" than lecture notes!).  
> **username_3**: What is "OI" and how is playing a game preparing you to learn Algorithms and Theoretical Computer Science?  
> **username_0**: @J..yB..y Hi there, OI is Olympic in Informatics: https://en.wikipedia.org/wiki/International_Olympiad_in_Informatics. In my college experience, lecture notes tend to be more concise than reference books, which is why I say this.  
> **username_4**: You might get benefits from the website https://www.codingame.com/, which gives you concrete challenges and nice graphical interfaces to guide you through many algorithmic concepts.  

---

## 1 answers

### Answer by username_3 on 2022-10-20. Score: 1

Having "a very poor memory" will make studying anything extra difficult, but 1) there are [exercises to improve your memory](https://www.lifehack.org/804141/brain-exercises-for-memory), and 2) [(emotional) motivation is considered to help memorizing things](https://en.wikipedia.org/wiki/Emotion_and_memory). I suspect that sticking to "dry knowledge collections" to study did not and will not help your memorization process, and might be part of the problem: there are several non traditional studying options for topics in theoretical computer science in general and algorithm design and analysis in particular which you might want to give a try:

1. Participating in programming competitions (at your university or online), and studying solutions of past contests, might be challenging enough to boost your memory abilities, and "dry knowledge collections". See for instance

   * the [ACM's International Collegiate Programming Contest](https://acm.cs.umd.edu/icpc/), and
   * the ones linked in the [Geeks for geeks's guide of competitive programming](https://www.geeksforgeeks.org/competitive-programming-a-complete-guide/).
2. The books "[The Art of Computer Programming](https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming)", from Donald Knuth, might be a good fit for a self-paced learner as you seem to see yourself. As books go, it is quite atypical in that it reads (even) more as a set of lecture notes (than other books), with extensive examples. Donald Knuth is considered to be one of the father of theoretical computer science: you will be learning from the best! The books are for sale but my students usually easily find digital versions online.
3. I would not recommend studying from "very dry knowledge collections" if you have memory problems, but if it is indeed what you need, you could obviously read a combination of

   * general articles on Wikipedia, starting with the one defining [Theoretical Computer Science](https://en.wikipedia.org/wiki/Theoretical_computer_science) and following the links from there, and of
   * scientific articles from journals and [conference proceedings](https://doi.org/10.4230/DagRep.8.7.44), starting from a recent one on a topic of interest to you (e.g. recent research on a topic you might have seen in discrete math, such as [Merge Sort](https://www.academia.edu/48716818/LRM_Trees_Compressed_indices_adaptive_sorting_and_compressed_permutations)), and identifying [older ones](https://doi.org/10.1016/j.tcs.2013.10.019) introducing the concepts you are not familiar with, such as a Ph.D. thesis (e.g. [Compressed Data Structures based on Adaptive Algorithms](https://www.academia.edu/778386/Compressed_Data_Structures_based_on_Adaptive_Algorithms)), a survey (e.g. [A survey of Adaptive Sorting Algorithms](https://doi.org/10.1145/146370.146381) ) or an overview (e.g. [A framework for adaptive sorting](https://doi.org/10.1016/0166-218X%2893%29E0160-Z)), going back in time as much as you need to insure mastery (e.g. as far as [Donald Knuth](https://archive.org/details/B-001-001-250)'s (him again!) introduction of [Adaptive Merge Sort](https://www.youtube.com/watch?v=dK1eOTRlLx8)!)

I hope it helps (apologies if I cited many of my own articles: they did seem relevant as examples!).
Welcome to cstheory SE!

> **Comments:**
> **username_0**: I appreciate your advice and resources. My answer to your conjecture is that I have a terrible memory and poor concentration skills. In my past reading of computer textbooks (e.g. DBMS), these textbooks tend to write a lot of sentences to help the reader understand the theory, and it was a disaster for me to divide my already inadequate attention to these sentences. So I will tend to be very dry notes, which allows me to more efficiently use my limited memory and ability to focus. Again, thank you a lot for your help!  

---

