Algorithm Engineering and Data Structures

Year:
1st year/2nd year
Semester:
S1
Programme main editor:
I2CAT
Onsite in:
Remote:
ECTS range:
6 ETCS

Professors

img
Professors
Paolo Ferragina
UNIPI

Prerequisites:

The goal of the course is to teach students how to design and analyze advanced algorithms and data structures for the efficient solution of combinatorial problems involving high volumes of basic data types, such as integers, strings, trees, and graphs.

Pedagogical objectives:

The goal of the course is to teach students how to design and analyze advanced algorithms and data structures for the efficient solution of combinatorial problems involving high volumes of basic data types, such as integers, strings, trees, and graphs.

Evaluation modalities:

Written exam

Description:

The design and analysis of advanced algorithms and data structures will involve basic data types (such as integers, strings, trees, and graphs) and several models of computation – such as RAM, 2-level memory, cache-oblivious, streaming – in order to take into account the architectural features and the memory hierarchy of modern PCs and the availability of Big Data upon which those algorithms could work on. Engineering considerations spurring from the implementation of the proposed algorithms and from experiments published in the literature will be also discussed.

Topics:

  • Sorting and Permuting atomic items in a disk-based setting: Multi-way mergesort, multi-way quicksort
  • Sorting strings: Multi-key quicksort, LSD-radix sort, MSD-radix sort
  • Randomised sampling in a streaming scenario
  • Hashing: universal, perfect, minimal ordered and perfect, Bloom filters
  • Randomized data structures: Treaps and skip lists
  • String data structures: Tries, Ternary search trees, Patricia Tries, Suffix arrays and suffix trees
  • Prefix- and substring-based searches over textual collections
  • Data compression: Integer codes, Elias-Fano coding, Canonical Huffman coding, Arithmetic coding, Lempel-Ziv parsing (gzip), Burrows-Wheeler Transform (bzip)

Required teaching material

Paolo Ferragina, Pearls of Algorithm Engineering, Cambridge University Press, 2023. https://www.cambridge.org/core/books/pearls-of-algorithm-engineering/95061352D7263CCCBD4F243018236EB2

Teaching volume:
lessons:
45 hours
Exercices:
15 hours
Supervised lab:
Project:

Devices:

  • Laboratory-Based Course Structure
  • Open-Source Software Requirements