Data Structures and
Algorithms

Ciprian Cornea

Faculty of Mathematics and Computer Science
Data Structures and Algorithms

overview

materials

labs

evaluation

The Algorithms and Data Structures course is designed to provide students with a solid knowledge of efficient algorithms and fundamental data structures in computer science. The course addresses essential concepts underlying software development and efficient computational problem solving.

Course Objectives:

Understanding Algorithms:

Students will learn the basic principles of algorithms, including time and space complexity analysis.

Data Structures:

Explore various data structures such as lists, stacks, queues, trees, and graphs, and understand how they influence the efficiency of algorithms.

Algorithm Design:

Develop skills in designing efficient algorithms for various problems such as sorting, searching, and traversing graphs.

Practical Implementation:

Application of theoretical knowledge in practical projects and labs to reinforce understanding and practical skills.

Course Materials:

Reference books: "Introduction to Algorithms" by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.

  • Course 1: Introduction to Algorithms and Data Structures

    Fundamentals of algorithms and data structures, basic terminology.

  • Course 2: Complexity Analysis and Big-O Notation

    Methods for analyzing algorithm efficiency, notations, and complexities.

  • Course 3: Sorting and Searching Algorithms

    Study and implementation of sorting and searching algorithms in various scenarios.

  • Course 4: Data Structures: Lists, Stacks, Queues

    Implementation and usage of lists, stacks, and queues in practical contexts.

  • Course 5: Trees and Tree Structures

    Exploration of concepts related to trees, including binary trees and AVL trees.

  • Course 6: Graphs and Traversal Algorithms

    Study of graphs and application of traversal algorithms in depth-first and breadth-first manners.

  • Course 7: Divide and Conquer Algorithms

    Understanding and implementation of divide and conquer algorithms for solving complex problems.

  • Course 8: Dynamic Programming

    Study and application of dynamic programming techniques for algorithm optimization.

  • Course 9: Greedy Algorithms

    Utilization of greedy algorithms in solving optimization problems.

  • Course 10: Network Flow Algorithms

    Application of network flow algorithms to solve network-related problems.

  • Course 11: NP-Hard Problems and Approximation Algorithms

    Study of NP-hard problems and strategies for efficiently approximate solutions.

  • Course 12: Practical Applications and Final Project

    Application of knowledge in practical projects, solving complex problems, and developing a final project.

  • Laboratory 1: Introduction to Algorithm Programming

    Objective: Understand the programming environment and basic algorithmic concepts.

    Practical Tasks:

    1. Implement simple sorting algorithms.
    2. Use fundamental data structures.

    Expected Outcomes:

    1. Correct and efficient source code.
    2. Adequate documentation of the code.
  • Laboratory 2: Data Structures in C++

    Objective: Implement and test data structures in the C++ programming language.

    Practical Tasks:

    1. Implement lists, stacks, and queues in C++.
    2. Test and compare the performance of these data structures.

    Expected Outcomes:

    1. Correct and well-structured source code.
    2. Comparative reports on the performance of data structures.
  • Laboratory 3: Sorting and Searching Algorithms

    Objective: Apply sorting and searching algorithms in practical contexts.

    Practical Tasks:

    1. Implement advanced sorting algorithms.
    2. Utilize searching algorithms for various scenarios.

    Expected Outcomes:

    1. Correct and efficient implementation of algorithms.
    2. Analysis of time and space complexity.
  • Laboratory 4: Graphs and Traversal Algorithms

    Objective: Understand graph-related concepts and apply traversal algorithms.

    Practical Tasks:

    1. Implement depth-first and breadth-first traversal algorithms.
    2. Apply these algorithms to solve specific graph-related problems.

    Expected Outcomes:

    1. Correct implementation of traversal algorithms.
    2. Efficient solutions to graph-related problems.

Course Evaluation Components:

  • Assignments and Labs:

    Practical tasks focusing on algorithm implementation and data structure usage. Assessment based on correctness, efficiency, and documentation of implemented algorithms.

  • Examinations:

    Periodic assessments evaluating theoretical understanding and problem-solving skills. Topics include algorithm design, complexity analysis, and data structure application.

  • Final Project:

    Application of knowledge to solve complex problems. Evaluation based on problem-solving approach, implementation, and presentation.

Assessment Criteria:

  • Algorithm Implementation:

    Accuracy and efficiency of implemented algorithms. Analysis of time and space complexity.

  • Data Structure Usage:

    Proficiency in utilizing various data structures (lists, stacks, queues, trees, graphs) for problem-solving.

  • Practical Skills:

    Application of theoretical concepts in labs and projects. Proper documentation and reporting of implemented algorithms and structures.

Grading:

Assignments/Labs: 30%
Examinations: 40%
Final Project: 30%

Feedback Mechanism:

Regular feedback sessions for addressing concerns and providing guidance.
Detailed feedback on assignments, labs, and the final project.