The course aims at a comprehensive introduction of students to fundamental concepts and methods of Computer Science. It consists of the following sections. **Theory.** Computability and complexity. Efficiency of algorithms. Modeling of computation: automata, Turing machines, random access machines (RAM). Formal languages ​​and grammars. Logic for computer science. Algorithms: techniques and strategies (divide-and-conquer, greedy method, dynamic programming), numerical calculations (GCD, exponentiation, integer and matrix multiplication), graph and network algorithms (shortest paths, minimum spanning trees), string algorithms (encoding, compression, recognition). **Data management.** Introduction to databases and data models. The entity-relationship model. Relational model and relational algebra. Introduction to SQL. Introduction to application design and development. Current trends: data flows, distributed databases, map-reduce computing model. **Artificial intelligence.** Introduction to artificial intelligence: historical data, Turing test, modern artificial intelligence and applications, terminology and areas of artificial intelligence. Problem solving with artificial intelligence methods: problem representation in graphs, solution search, solution finding algorithms (depth-first, breadth-first, iterative deepening), heuristic solution finding algorithms (hill climbing, best first, branch and bound, A*), game algorithms (min-max, alpha-beta). Symbolic artificial intelligence: from logic to artificial intelligence, formal knowledge representation, knowledge graphs, automatic reasoning. Machine learning: data analysis, classification and prediction, perceptrons, linear regression, classification with clustering.
ECTS : 5
Study Load : theory 4, lab 0
Language : el, en
Learning Outcomes : By the end of this course, students will be able to: -Understand the concepts of alphabets, strings, languages, and grammars. -Design and analyze finite automata (DFA and NFA) for language recognition. -Convert between regular expressions and finite automata. -Minimize finite automata. -Prove whether a language is regular or non-regular using tools such as the pumping lemma and closure properties. -Describe and construct context-free grammars (CFGs). -Construct formal proofs related to automata, languages, and computation. -Learn how to analyze algorithms and express their time complexity in big-oh notation. -Learn how to argue about the correctness of algorithms. -Become aware of basic algorithmic strategies and algorithm design techniques (divide and conquer, Greedy methods, Dynamic programming). -Understand numerical algorithms for computing gcd, powers of integers and Karatsuba's multiplication algorithm. -Become familiar with introductory concepts of artificial intelligence. -To understand the operation of AI algorithms such as solution finding (depth-first, breadth-first, iterative deepening), heuristic solution finding algorithms (hill climbing, best first, branch and bound, A*.