Algorithms

Undergraduate course, Giresun University, Department of Computer Engineering, 2026

algorithms An algorithm is a finite and well-defined sequence of steps for solving a problem or performing a computation. Algorithms form the foundation of software systems and are used in tasks ranging from sorting and searching to graph processing, optimization, text analysis, and scientific computing. This course examines fundamental algorithm-design techniques, correctness, time and space complexity, and the practical trade-offs between alternative solutions.

Ders Öğretim Planı

Ders Öğretim Planı (PDF)


Announcements

There are currently no announcements.


Course resources


Past Exams


Preliminary Materials:

  • Prerequisites for preparation pdf
  • Key figures who have shaped the field pdf

Chapter 1: Introduction to Algorithms

Algorithms are the step-by-step procedures that form the core of computer science, guiding computers through the maze of processing data. They are like the DNA of software, encoding the essence of problem-solving. Complexity, on the other hand, measures how an algorithm’s resource needs (like time and storage) grow as the input size increases. It’s a way to rate the efficiency of an algorithm, ensuring it can handle large amounts of data without breaking a sweat.


Chapter 2: Sorting Algorithms

Sorting algorithms are the architects of order, meticulously organizing data into a specific sequence, such as ascending or descending. They are fundamental tools in computer science, used to manage and retrieve data with efficiency and precision. There’s a variety of sorting methods, each with its own strategy and performance nuances.


Chapter 3: Searching Algorithms

Searching algorithms are the detectives of the data world, designed to track down information with speed and accuracy. They are used in a wide variety of applications, such as finding a file on a computer, a customer in a database, and a word in a document. They come in various forms, each suited to different scenarios.


Chapter 4: Graph Algorithms

Graphs, composed of nodes and edges, are ubiquitous in various domains, including social networks, transportation systems, and computational biology. Graph algorithms are the masterminds behind the scenes of network analysis, adept at solving puzzles that involve points and connections. They help us navigate through complex networks, from social media graphs to city maps. Graph algorithms enable us to explore, analyze, and manipulate these complex structures efficiently.


Chapter 5: String Algorithms

Have you ever wondered how your computer or smartphone handles text so efficiently? String algorithms are the craftsmen of text processing, weaving through characters to perform tasks like searching, sorting, and editing text. They are crucial in fields like computational biology for DNA sequencing, in search engines for matching queries, or even in text editors for find-and-replace functions.


Chapter 6: Dynamic Programming

Dynamic programming is a powerful technique for solving optimization problems by breaking them down into smaller subproblems. At its core, dynamic programming involves breaking down daunting tasks into smaller, more manageable subproblems, allowing us to systematically find optimal solutions.


Chapter 7: Approximation algorithms

Approximation algorithms efficiently produce near-optimal solutions for optimization problems whose exact solutions may be computationally expensive. They are especially useful for NP-hard problems, for which no polynomial-time exact algorithm is currently known.


Chapter 8: Randomized algorithms

Randomized algorithms incorporate random choices into their execution. Randomization may simplify an algorithm, improve its expected running time, or reduce sensitivity to adversarial inputs. Their guarantees may concern running time, correctness probability, or approximation quality.


Chapter 9: Online algorithms

Online algorithms process input incrementally and make irrevocable decisions without knowing future requests. Their performance is commonly evaluated through competitive analysis, which compares an online algorithm with an optimal offline algorithm that knows the complete input in advance.


Chapter 10: Parallel algorithms

Parallel algorithms divide computation among multiple processing units to reduce execution time, increase throughput, or process large datasets efficiently. Their design must consider dependencies, communication overhead, synchronization, workload balance, speedup, and scalability.


Chapter 11: Divide-and-Conquer paradigm

The divide-and-conquer paradigm is an algorithmic design paradigm that breaks down a problem into smaller subproblems of the same or related type, until these become simple enough to be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem.


Chapter 12: Greedy algorithms

Greedy algorithms build a solution incrementally by choosing the locally best available option at each step, without revisiting earlier decisions. They produce optimal solutions only when the problem satisfies suitable structural properties, such as the greedy-choice property and optimal substructure.


Chapter 13: Backtracking algorithms

Backtracking systematically explores a search space by extending partial candidates. When a partial candidate can no longer lead to a valid solution, the algorithm abandons that branch and returns to an earlier decision point.


Chapter 14: Branch-and-Bound algorithms

Branch and bound algorithms are a type of algorithm that solves optimization problems by breaking them down into smaller subproblems and using a bounding function to eliminate subproblems that cannot contain the optimal solution. It is an algorithm design paradigm for discrete and combinatorial optimization problems, as well as mathematical optimization.

Supplementary Topics