Basedon a new classification of algorithm design techniques and a clear delineation of analysis methods, "Introduction to the Design and Analysis of Algorithms" presents the subject in a coherent and innovative manner. Written in a student-friendly style, the book emphasizes the understanding of ideas over excessively formal treatment while thoroughly covering the material required in an introductory algorithms course. Popular puzzles are used to motivate students' interest and strengthen their skills in algorithmic problem solving. Other learning-enhancement features include chapter summaries, hints to the exercises, and a detailed solution manual.
I am a tenth grader. I currently learnt about sorting algorithms in java in school. I started with the book "Algorithmic Mathematics" so as learn about algorithms mathematically. I know very little calculus(just started limits) and thus, I had difficulty following it knowing that I am not mature enough to read it .Thus, I want a book that is light on calculus and has good theory on algorithms and some discrete math.
A gentle but rigorous introduction would be Algorithm Design by Tardos and Kleinberg. It covers all the necessary topics, and discusses the ideas and intuitions behind an algorithm before introducing it. Unlike CLRS, you don't need to "pick and choose" chapters to read as a beginner; instead, you can just follow through the chapters since they are structured in sequential order for a proper course in algorithms.
Should you need additional exercises or a different perspective, I've found the books Algorithms by Papadimitriou, Dasgupta, and Vazirani as well as Algorithm Design and Applications by Goodrich and Tamassia helpful.
N.B.: In most universities, typically an algorithms course (where you learn about topics like greedy algorithms, dynamic programming, graph algorithms, amortized analysis, and NP-completeness, etc.) comes after a data structures course (where you learn introductory notions of algorithm analysis, basic data structures such as queues, stacks, BST/balanced BST, and DFS/BFS, etc). The way I see it, the first course is usually not needed, as its contents can easily be baked into the course on algorithm design (i.e. the second course). The textbooks I reference above are the ones typically used for the second course, although they also cover any useful material from the first course, should they be required (notably missing is advanced data structures, e.g. balanced BST).
If you want to learn about how to program (how to put together the above to create useful applications), consider Downey's "Think Python" (be sure to get the second edition, as it is written for Python 3, the current version). Also a free PDF.
Much of algorithms is mathematics, just not the standard school/undergraduate fare. Perhaps you'd need to take a peek at some discrete math and something extra, search for William Chen's lecture notes. He wrote a large collection of them, covering from introductory material to somewhat advanced topics.
The above are just my personal favourites, you'd have to find what suits you most. Fortunately this is part of the computing curricula, looking for introductory courses will net you loads of lecture notes, exercises and whatnot.
Although it is not an introduction for beginners, knowledge of the existence Knuth's work on fundamental algorithms is important for a beginning Computer Scientist. One day in the future they will need to consult a copy. So for completeness, and for your future as a computer scientist put this on your "wish list":
This Syllabus is provided for informational purposes regarding the anticipatedcourse content and schedule of this course. It is based upon the most recentinformation available on the date of its issuance and is as accurate andcomplete as possible. I reserve the right to make any changes I deem necessaryand/or appropriate. I will make my best efforts to communicate any changes inthe syllabus in a timely manner. Students are responsible for being aware ofthese changes.
From the catalog: This course is to provide anintroduction to the design and analysis of computer algorithms. The studentswill learn how to analyze the performance of computer algorithms, andprogramming techniques and data structures used in the writing of effectivealgorithms.
We will discuss classic algorithm design strategies (e.g., divide-and-conquer,dynamic programming, greedy approaches), data structures (e.g., hash tables,binary search trees), classic problems (e.g., sorting, knapsack problem,scheduling, graph-related problems) and the classic algorithms to solve them.We will also analyze algorithm complexity throughout, and touch on issues of tractibility such as NP-Completeness.
One lowest grade in homework will be dropped. Exams cannot be made up, cannot be taken early, and must be taken in class atthe scheduled time. There will be no makeup exams. The grade that youobtain for the course will also serve as the grade for the lab.
You are not allowed to read, copy, or rewrite the solutions written byothers (in this or previous terms). Copying materials from websites, books orother sources is considered equivalent to copying from another student.
Every cheating (for example, copy homework solutions from the web, friendsor other textbooks) will be reported to the office of academic integrity. Iftwo people are caught sharing solutions then both the copier and copiee will be held equally responsible. Cheating on anexam will result in failing the course.
It is your responsibility to contact me in a timely manner if there areextenuating circumstances that impact your ability to perform in this class.Your grade is 'not given' by the instructor, but rather is earned by you throughdemonstrating your mastery of the subject.
General objectives
The primary objective is to study algorithms and data structures that efficiently solve problems whose solution, using trivial approaches, would require very high resources. The algorithms studied will be implemented in Java language.
Specific objectives
Knowledge and ability to understand
Basic data structures and their use in solving sorting, searching, and graph problems will be shown. It will be shown how the data structures described are made available in Java language. The student will be able to determine the computational complexity of algorithms, and associate them with the appropriate complexity class.
Ability to apply knowledge and understanding
At the end of the course the students will be able to determine algorithms to efficiently solve complex problems, in particular problems on graphs, and choose the most suitable data structures to obtain an efficient implementation of the algorithm. They will also be able to use the Java classes that implement the data structures studied.
Autonomy of judgment
Students will be able to distinguish the computational complexity of problems and algorithms, and to identify the computationally more costly steps in solving a problem.
Communication skills
Students will be able to describe, in appropriate terms, the characteristics of the main data structures, and identify the primitives needed to efficiently implement an algorithm.
Learning ability
Students who pass the exam will be able to take advanced courses, of an applicative nature, that require the use of sophisticated algorithms. They will also be able to appreciate software engineering and computational complexity theory teachings.
The course covers algorithmic programming techniques. The primary goal is to study algorithms and data structures that efficiently solve problems that would require very high computational resources (time or space) using trivial approaches. We will address problems frequently arising in practical applications and real-world situations, such as sorting, searching, and graph traversal, as well as general design techniques including divide and conquer, greedy algorithms, and dynamic programming.
The course will cover the entire algorithm engineering cycle, addressing the design, theoretical analysis, implementation, and experimental evaluation of algorithms and data structures. The students will practice solving computational problems, designing new algorithms, and implementing efficient solutions in Python.
The exam will consist of two tests,
theory test (closed-ended and open-ended questions)
programming test (computer programming exercises), on paper.
To complete the exam it will be necessary to obtain in both a
grade not less than 18. The final grade of the exam will be an average
arithmetic of the two tests' grades.
A colloquium may be required, depending on tests' scores
3a8082e126