The course focuses on the development of software for solving an important problem in Computer Science, on the use of the software in a real application and on its experimental evaluation. The followed approach aims at the familiarization of the students with large scale programming, often with the use of open source software libraries through team work as well as at the development of skills for the implementation and practical utilization of established, efficient algorithms. C/C++ is used as a programming language in the course. Topics covered include the implementation of efficient algorithms, their experimental evaluation, software organization and design principles, the use of open source libraries and software tools such as: Qt, Boost, Gnuplot, LAPACK, Eigen, Unit testing frameworks, collaboration and version control systems such as git and SVN as well as collaborative large scale implementation. Three assignments for the design and development of software for solving hard algorithmic problems are given with emphasis on the fields of data science and computational geometry.
Textbook for general C/C++ programming (Εύδοξος):
Bruce Eckel, Thinking in C++, vol. 2, εκδόσεις Μ. Γκιούρδας, 2009
Scientific publication that change from year to year according to the examined algorithmic problems.
PDF/powerpoint presentations for the description of the examined problems, the algorithmic techniques, software organization and design principles as well as for all the libraries and software tools which are used in the course.