Data Structures and Algorithms
Software job interviews are incredibly challenging/technical when compared to other disciplines. For these interviews, especially those involving big tech companies, knowledge of data structures and algorithms is incredibly important. This is because data structures and algorithms are an essential part of becoming a competent software developer. These concepts are required to ensure that your software, in addition to being functional, reaches its peak performance for the desired function.
If you are a software developer, you will need to refresh yourself on these concepts periodically throughout your career. Especially before a job interview. As such, I have structured this tutorial to accommodate first-time learners as well as experienced programmers. However, if you are learning these concepts for the first time, you will need to be familiar with the concepts of object oriented programming (OOP), recursion, and stack/heap memory.
There are 5 distinct pillars to learning Data Structures and Algorithms. The links to each are included below:
- Complexity and Big O Notation
- Theory/techniques necessary to determine/compare the performance of data structures and algorithms. The first prerequisite to understanding data structures and algorithms is to have a decent understanding of time and space complexity in terms of Big O notation.
- Searching Algorithms
- Algorithms used to search data structures efficiently. Since searching is a fundamental operation for data structures, these algorithms are a prerequisite.
- Data Structures
- Methods of organizing data in software. Each data structure has pros and cons that make them suitable for specific applications. To write optimal algorithms, you must know the corresponding optimal data structures.
- Sorting Algorithms
- Algorithms used to sort data structures efficiently. Since sorting is an incredibly common process when developing algorithms, knowing the popular sorting algorithms and their relative advantages is an important skill to have.
- Algorithm Design and Moving Forward (work in progress)
- Sequences of well-defined instructions to perform a desired function. Writing efficient algorithms means being aware of the above topics during your development process. If you are comfortable with each of the prerequisites, the only thing left is to practice.