Αναζήτηση χωρίς πληροφόρηση

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Αναζήτηση χωρίς πληροφόρηση"

Transcript

1 Version 1.4 (26/02/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος εαρινό εξάμηνο Αναζήτηση χωρίς πληροφόρηση Εισαγωγή Οι αλγόριθμοι αναζήτησης σε συνδυασμό με την αναπαράσταση γνώσης αποτελούν τον πυρήνα των εφαρμογών Τεχνητής Νοημοσύνης (Norvig03, Βλαχαβάς06, Ertel11). Θεωρώντας κατάλληλες περιγραφές του προβλήματος, αναζητούν τη λύση του εξετάζοντας με κάποια σειρά τις διαφορετικές καταστάσεις στις οποίες μπορεί να περιέλθει ο κόσμος του προβλήματος. Οι αλγόριθμοι αναζήτησης μπορεί να διαφέρουν σε χαρακτηριστικά όπως η χρονική πολυπλοκότητα, η χωρική πολυπλοκότητα, η πληρότητα (δηλαδή η εγγύηση της εύρεσης λύσης εφόσον υπάρχει) καθώς και σε άλλα χαρακτηριστικά. Υπάρχει πληθώρα αλγορίθμων αναζήτησης και δεν υπάρχει κάποιος αλγόριθμος αναζήτησης που να υπερτερεί έναντι όλων των άλλων σε όλες τις περιπτώσεις. Σε γενικές γραμμές οι αλγόριθμοι αναζήτησης λειτουργούν διατηρώντας μια λίστα από καταστάσεις του προβλήματος οι οποίες πρόκειται να εξεταστούν και η οποία ονομάζεται μέτωπο αναζήτησης (frontier ή fringe). Οι καταστάσεις του μετώπου αναζήτησης ελέγχονται με κάποια σειρά σχετικά με το εάν αποτελούν λύση του προβλήματος και πραγματοποιούνται επεκτάσεις καταστάσεων (expansions) κατά τις οποίες προστίθενται στο μέτωπο αναζήτησης καταστάσεις (successor states) που προκύπτουν από την τρέχουσα κατάσταση μέσω κάποιων τελεστών μετάβασης (transition operators). Για να αποφευχθεί η δημιουργία βρόχων αναζήτησης (loops) διατηρείται το κλειστό σύνολο (closed set) που αποτελείται από τις καταστάσεις οι οποίες έχουν ήδη επεκταθεί. Εφόσον χρησιμοποιείται κλειστό σύνολο μια κατάσταση πριν επεκταθεί εξετάζεται εάν ανήκει στο κλειστό σύνολο. Αν αυτό συμβαίνει τότε δεν επεκτείνεται ξανά. Στα πλαίσια του παρόντος εργαστηρίου θα παρουσιαστούν οι αλγόριθμοι: 1. Αναζήτηση πρώτα κατά πλάτος (Breadth First Search) 2. Αναζήτηση πρώτα κατά βάθος (Depth First Search) 3. Αναζήτηση ομοιόμορφου κόστους (Uniform Cost Search) Οι ανωτέρω αλγόριθμοι ανήκουν στην κατηγορία των αλγορίθμων αναζήτησης χωρίς πληροφόρηση (ή αλγορίθμων τυφλής αναζήτησης) δηλαδή δεδομένης μιας κατάστασης που δεν είναι κατάσταση στόχου δεν υπάρχει πληροφόρηση σχετικά με το εάν η κατάσταση βρίσκεται κοντά ή μακριά από το στόχο. Αναζήτηση πρώτα κατά πλάτος (BFS=Breadth First Search) Στην αναζήτηση πρώτα κατά πλάτος οι καταστάσεις που επεκτείνονται πρώτες είναι εκείνες που έχουν προστεθεί νωρίτερα στο μέτωπο αναζήτησης. Συνεπώς, μπορεί να χρησιμοποιεί η δομή δεδομένων ουρά (queue) για τη διαχείριση του μετώπου αναζήτησης. Αν η τρέχουσα κατάσταση δεν ανήκει στο κλειστό σύνολο η εισαγωγή των γειτονικών της καταστάσεων γίνεται στο πίσω άκρο του μετώπου αναζήτησης. Στη συνέχεια ακολουθεί ο ψευδοκώδικας του αλγορίθμου και ο κώδικας σε C++ για την αναζήτηση πρώτα κατά πλάτος. 1

2 bool bfs(struct di_graph graph, string start_vertex, string goal_vertex) { set<string> closed { ; queue<string> frontier { ; // FIFO frontier.push(start_vertex); string current_state = frontier.front(); bool found { true ; while (goal_vertex.compare(current_state)!= 0) { if (closed.find(current_state) == closed.end()) { for (string v : get_successors(graph, current_state)) frontier.push(v); closed.insert(current_state); if (frontier.empty()) return false; current_state = frontier.front(); return true; Ψευδοκώδικας για τον αλγόριθμο αναζήτησης πρώτα κατά πλάτος (Βλαχαβάς06) Κώδικας σε C++ για την αναζήτηση πρώτα κατά πλάτος (χωρίς δομές για την αποθήκευση της διαδρομής και του μήκους της) Αναζήτηση πρώτα κατά βάθος (DFS=Depth First Search) Στην αναζήτηση πρώτα κατά βάθος οι καταστάσεις που επεκτείνονται πρώτες είναι οι τελευταίες που προστέθηκαν στο μέτωπο αναζήτησης. Συνεπώς, είναι φυσικό να χρησιμοποιείται η δομή της στοίβας (stack) για τη διαχείριση του μετώπου αναζήτησης. Αναζήτηση ομοιόμορφου κόστους (UCS=Uniform Cost Search) Στην αναζήτηση ομοιόμορφου κόστους οι καταστάσεις που επεκτείνονται πρώτες είναι εκείνες που έχουν το χαμηλότερο κόστος για τη μετάβαση από την αρχική κατάσταση μέχρι αυτές. Για τη διαχείριση του μετώπου αναζήτησης μπορεί να χρησιμοποιηθεί η δομή δεδομένων ουρά προτεραιότητας (priority_queue). Πρόβλημα εύρεσης διαδρομής σε ένα γράφημα πόλεων Το πρόβλημα που θα χρησιμοποιηθεί για την επίδειξη των αλγορίθμων αναζήτησης είναι το πρόβλημα εύρεσης της διαδρομής από μια πόλη σε μια άλλη στον ακόλουθο χάρτη. Εικόνα 1. Romania tour 2

3 Περιγράφοντας το πρόβλημα με χρήση του χώρου καταστάσεων θα πρέπει να οριστεί η ακόλουθη τετράδα (I,G,T,S): I: Αρχική κατάσταση G: Σύνολο τελικών καταστάσεων T: Τελεστές μετάβασης S: Χώρος καταστάσεων Συνεπώς για το πρόβλημα εύρεσης της διαδρομής από μια πόλη σε μια άλλη πόλη ισχύει ότι: Αρχική κατάσταση Ι είναι η κατάσταση κατά την οποία ο ταξιδιώτης βρίσκεται στην πόλη αφετηρία και δεν έχει ξεκινήσει ακόμα τη διαδρομή του προς την πόλη προορισμό. Το σύνολο G αποτελείται από όλες τις καταστάσεις κατά τις οποίες ο ταξιδιώτης ξεκινώντας από την πόλη αφετηρία (π.χ. Arad) και ακολουθώντας μια διαδρομή που αποτελείται από διαδοχικές μεταβάσεις μεταξύ γειτονικών πόλεων καταλήγει να βρίσκεται στην πόλη προορισμό (π.χ. Bucharest). Τ είναι ο τελεστής μετάβασης του ταξιδιώτη από μια πόλη σε κάποια άλλη γειτονική πόλη σύμφωνα με τον χάρτη. Ο χώρος καταστάσεων S του προβλήματος αποτελείται από όλες τις πιθανές διαδρομές που μπορεί να προκύψουν κατά την αναζήτηση της διαδρομής από μια οποιαδήποτε πόλη προς κάποια άλλη πόλη. Ο δε χώρος αναζήτησης (search space) αποτελείται από όλες τις πιθανές διαδρομές που μπορεί να προκύψουν κατά την αναζήτηση της διαδρομής από την πόλη αφετηρία προς την πόλη προορισμό. Κωδικοποίηση δεδομένων προβλήματος Τα δεδομένα του προβλήματος βρίσκονται κωδικοποιημένα στο αρχείο tour_romania.txt το οποίο αποτελείται από 2 τμήματα. Το τμήμα καταγραφής των κορυφών (vertices) στο οποίο αποδίδεται ένα όνομα σε κάθε κορυφή του γραφήματος (το πρώτο γράμμα της αντίστοιχης πόλης) και το τμήμα καταγραφής των ακμών του γραφήματος που αποτελείται από κατευθυνόμενες ακμές της μορφής: από πόλη, προς πόλη, απόσταση (π.χ. A,S,140 σημαίνει ότι η απόσταση της διαδρομής από Arad προς Sibiu είναι 140 χιλιόμετρα) # tour romania example [VERTICES:20] A,Arad B,Bucharest C,Craiova D,Drobeta E,Eforie F,Fagaras G,Giurgiu H,Hirsova I,Iasi L,Lugoj M,Mehadia N,Neamt O,Oradea P,Pitesti R,Rimniu Vilcea S,Sibiu T,Timisoara U,Urziceni V,Vaslui Z,Zerind [EDGES:46] A,S,140 A,T,118 A,Z,75 B,F,211 B,G,90 B,P,101 B,U,85 C,D,120 E,H,86 F,B,211 F,S,99 G,B,90 H,E,86 H,U,98 I,N,87 I,V,92 L,M,70 L,T,111 M,D,75 M,L,70 N,I,87 O,S,151 O,Z,71 P,B,101 P,C,138 P,R,97 R,C,146 R,P,97 R,S,80 S,A,140 S,F,99 S,O,151 S,R,80 T,A,118 T,L,111 U,B,85 U,H,98 U,V,142 V,I,92 3

4 C,P,138 C,R,146 D,C,120 D,M,75 V,U,142 Z,A,75 Z,O,71 Περιεχόμενα αρχείου tour_romania.txt Για την περίπτωση του αρχείου tour_romania.txt ο πίνακας γειτνίασης του γραφήματος μετά την ανάγνωση από το αρχείο θα έχει τα ακόλουθα δεδομένα: vertices A B C D E F G H I L M N O P R S T U V Z A B C D E F G H I L M N O P R S T U V Z adjacency_matrix Υλοποίηση κωδικοποίησης γραφήματος σε C++ Στη συνέχεια παρουσιάζεται ο κώδικας που ορίζει τη δομή του γραφήματος και την ανάγνωση των δεδομένων ενός γραφήματος από ένα αρχείο κειμένου με τη μορφή που έχει περιγραφεί παραπάνω. Η υλοποίηση έχει οργανωθεί στα ακόλουθα αρχεία: lab01_graph.hpp lab01_graph.cpp lab01_01.cpp #include <iostream> #include <list> 4

5 #include <cstring> using namespace std; // δομή γραφήματος struct di_graph { int V; // αριθμός κορυφών γραφήματος int E; // αριθμός ακμών γραφήματος string *vertices; // συντομογραφίες ονομάτων κορυφών string *vertices_full_names; // πλήρη ονόματα κορυφών int **adjacency_matrix; // πίνακας γειτνίασης ; // επιστροφή του ονόματος της κορυφής με δεδομένη τη θέση της κορυφής string get_vertex_label(struct di_graph graph, int vertex_index); // επιστροφή της θέσης της κορυφής με δεδομένο το όνομα της κορυφής int get_vertex_index(struct di_graph graph, string vertex); // επιστροφή του μήκους της ακμής ανάμεσα σε 2 κορυφές int get_weight(di_graph graph, string source_vertex, string destination_vertex); // επισστροφή λίστας με τις γειτονικές κορυφές μιας κορυφής του γραφήματος // ταξινομημένες σε αύξουσα ή σε φθίνουσα αλφαβητική σειρά list<string> get_successors(struct di_graph graph, string node, bool asc_order=true); // Εκτύπωση της πληροφορίας του γραφήματος void print_graph_info(struct di_graph graph); // ανάγνωση γραφήματος από αρχείο κειμένου struct di_graph read_data(string fn); // απελευθέρωση της μνήμης που καταλαμβάνει το γράφημα void free_memory(struct di_graph graph); lab01_graph.hpp #include "lab01_graph.hpp" #include <sstream> #include <fstream> using namespace std; string get_vertex_label(struct di_graph graph, int vertex_index) { return graph.vertices[vertex_index]; int get_vertex_index(struct di_graph graph, string vertex) { int vertex_index{-1; for (int i = 0; i < graph.v; i++) if (graph.vertices[i].compare(vertex) == 0) { vertex_index = i; break; return vertex_index; int get_weight(di_graph graph, string source_vertex, string destination_vertex) { return graph.adjacency_matrix[get_vertex_index( graph, source_vertex)][get_vertex_index(graph, destination_vertex)]; list<string> get_successors(struct di_graph graph, string node, bool asc_order) { list<string> successors{; 5

6 int node_index = get_vertex_index(graph, node); for (int j = 0; j < graph.v; j++) if (graph.adjacency_matrix[node_index][j]!= 0) successors.push_back(get_vertex_label(graph, j)); successors.sort(); if (!asc_order) successors.reverse(); return successors; void print_graph_info(struct di_graph graph) { cout << "Vertices=" << graph.v << endl; for (int i = 0; i < graph.v; i++) cout << "Vertex " << graph.vertices_full_names[i] << "(" << graph.vertices[i] << ")" << endl; cout << "Edges=" << graph.e << endl; for (int i = 0; i < graph.v; i++) for (int j = 0; j < graph.v; j++) if (graph.adjacency_matrix[i][j]!= 0) cout << graph.vertices_full_names[i] << "(" << graph.vertices[i] << ")--" << graph.adjacency_matrix[i][j] << "-->" << graph.vertices_full_names[j] << "(" << graph.vertices[j] << ")" << endl; struct di_graph read_data(string fn) { struct di_graph graph {; fstream filestr{; filestr.open(fn.c_str()); if (filestr.is_open()) { string vertices_header{; getline(filestr, vertices_header); // αγνόησε τις αρχικές γραμμές που ξεκινάνε με τον χαρακτήρα # while (vertices_header.at(0) == '#') getline(filestr, vertices_header); graph.v = stoi(vertices_header.substr(vertices_header.find(":") + 1, vertices_header.length() - 1)); graph.vertices = new string[graph.v]{; graph.vertices_full_names = new string[graph.v]{; for (int i = 0; i < graph.v; i++) { string vertex{; getline(filestr, vertex); // trim κενών χαρακτήρων δεξιά του λεκτικού vertex vertex.erase(vertex.find_last_not_of(" \n\r\t") + 1); int pos = vertex.find(","); if (pos == -1) { // αν δεν υπάρχει δεύτερο όνομα τότε χρησιμοποιείται η συντομογραφία graph.vertices[i] = vertex.substr(0, vertex.length()); graph.vertices_full_names[i] = vertex.substr(0, vertex.length()); else { graph.vertices[i] = vertex.substr(0, pos); graph.vertices_full_names[i] = vertex.substr(pos + 1, vertex.length() - pos - 1); string edges_header{; getline(filestr, edges_header); graph.e = stoi(edges_header.substr(edges_header.find(":") + 1, edges_header.length() - 1)); graph.adjacency_matrix = new int *[graph.v]{; for (int i = 0; i < graph.v; i++) graph.adjacency_matrix[i] = new int[graph.v]{; for (int i = 0; i < graph.e; i++) { string edge{; getline(filestr, edge); edge.erase(edge.find_last_not_of(" \n\r\t") + 1); 6

7 int pos1 = edge.find(","); int pos2 = edge.find(",", pos1 + 1); string source_vertex = edge.substr(0, pos1); string destination_vertex = edge.substr(pos1 + 1, pos2 - pos1-1); int weight = stoi(edge.substr(pos2 + 1, edge.length() - pos2)); int source_vertex_index = get_vertex_index(graph, source_vertex); int destination_vertex_index = get_vertex_index(graph, destination_vertex); if ((source_vertex_index >= 0) && (source_vertex_index < graph.v)) graph.adjacency_matrix[source_vertex_index][destination_vertex_index] = weight; else { cerr << "Edge data problem" << endl; exit(-1); else { cout << "Error opening file: " << fn << endl; exit(-1); return graph; void free_memory(struct di_graph graph) { delete[] graph.vertices; delete[] graph.vertices_full_names; for (int i = 0; i < graph.v; i++) { delete[] graph.adjacency_matrix[i]; delete[] graph.adjacency_matrix; lab01_graph.cpp #include "lab01_graph.hpp" using namespace std; int main(int argc, char **argv) { struct di_graph graph { ; if (argc!= 2) { cout << "Wrong number of arguments" << endl; exit(-1); string fn{argv[1]; graph = read_data(fn); print_graph_info(graph); free_memory(graph); lab01_01.cpp Ο κώδικας μεταγλωττίζεται με την εντολή: g++ lab01_graph.cpp lab01_01.cpp -o lab01_01 -Wall -std=c++11 Η εκτέλεση και τα αποτελέσματα της εκτέλεσης του κώδικα παρουσιάζονται στη συνέχεια:./lab01_01 data/tour_romania.txt Vertices=20 Vertex Arad(A) Vertex Bucharest(B) Vertex Zerind(Z) Edges=46 Arad(A) >Sibiu(S) 7

8 Arad(A) >Timisoara(T) Zerind(Z)--71-->Oradea(O) Υλοποίηση βασικών μορφών των αλγορίθμων BFS και DFS Ο ακόλουθος κώδικας υλοποιεί την αναζήτηση πρώτα κατά πλάτος και την αναζήτηση πρώτα κατά βάθος χωρίς να διατηρεί τη διαδρομή που εντοπίζεται. Η υλοποίηση έχει οργανωθεί στα ακόλουθα αρχεία: lab01_graph.hpp lab01_graph.cpp lab01_search_simple.hpp lab01_search_simple.cpp lab01_02.cpp #include "lab01_graph.hpp" // Ο αλγόριθμος αναζήτησης κατά πλάτος χωρίς αποθήκευση της διαδρομής void breadth_first_search_base(struct di_graph graph, string start_vertex, string goal_vertex); // Ο αλγόριθμος αναζήτησης κατά βάθος χωρίς αποθήκευση της διαδρομής void depth_first_search_base(struct di_graph graph, string start_vertex, string goal_vertex); lab01_search_simple.hpp #include "lab01_search_simple.hpp" #include <set> #include <queue> #include <stack> #include <unordered_map> using namespace std; void breadth_first_search_base(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "BREADTH FIRST SEARCH" << endl; unordered_map<string, int> hm; set<string> closed{; queue<string> frontier{; // FIFO frontier.push(start_vertex); string current_state = frontier.front(); hm[current_state] = 0; bool found{true; cout << "Starting from node " << start_vertex << endl; while (goal_vertex.compare(current_state)!= 0) { bool is_in{closed.find(current_state)!= closed.end(); if (!is_in) { for (string v : get_successors(graph, current_state)) { frontier.push(v); hm[v] = hm[current_state] + get_weight(graph, current_state, v); closed.insert(current_state); if (frontier.empty()) { found = false; break; current_state = frontier.front(); cout << "current state: " << current_state << endl; if (found) cout << "Path from " << start_vertex << " to " << goal_vertex 8

9 << " found having length " << hm[goal_vertex] << endl; else cout << "Path from " << start_vertex << " to " << goal_vertex << " was not found!" << endl; void depth_first_search_base(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "DEPTH FIRST SEARCH" << endl; unordered_map<string, int> hm; set<string> closed{; stack<string> frontier{; // LIFO frontier.push(start_vertex); string current_state = frontier.top(); hm[current_state] = 0; bool found{true; cout << "Starting from node " << start_vertex << endl; while (goal_vertex.compare(current_state)!= 0) { bool is_in{closed.find(current_state)!= closed.end(); if (!is_in) { for (string v : get_successors(graph, current_state, false)) { frontier.push(v); hm[v] = hm[current_state] + get_weight(graph, current_state, v); closed.insert(current_state); if (frontier.empty()) { found = false; break; current_state = frontier.top(); cout << "current state: " << current_state << endl; if (found) cout << "Path from " << start_vertex << " to " << goal_vertex << " found having length " << hm[goal_vertex] << endl; else cout << "Path from " << start_vertex << " to " << goal_vertex << " was not found!" << endl; lab01_search_simple.cpp #include "lab01_search_simple.hpp" int main(int argc, char **argv) { struct di_graph graph { ; string fn{; string start_vertex{, goal_vertex{, search_method{; if (argc == 5) { fn = argv[1]; start_vertex = argv[2]; goal_vertex = argv[3]; search_method = argv[4]; graph = read_data(fn); if (search_method.compare("bfs") == 0) breadth_first_search_base(graph, start_vertex, goal_vertex); else if (search_method.compare("dfs") == 0) depth_first_search_base(graph, start_vertex, goal_vertex); else cerr << "Invalid choice" << endl; free_memory(graph); lab01_02.cpp 9

10 Ο κώδικας μεταγλωττίζεται με την εντολή: g++ lab01_graph.cpp lab01_search_simple.cpp lab01_02.cpp -o lab01_02 -std=c++11 Η εκτέλεση και τα αποτελέσματα της εκτέλεσης του κώδικα για τη μετάβαση από Craiova προς Bucharest στο πρόβλημα tour_romania.txt χρησιμοποιώντας τον αλγόριθμο αναζήτησης πρώτα κατά πλάτος παρουσιάζονται στη συνέχεια:./lab01_02 data/tour_romania.txt C B bfs BREADTH FIRST SEARCH Starting from node C current state: D current state: P current state: R current state: C current state: M current state: B Path to goal node B found with length 239 Υλοποίηση αλγορίθμων BFS, DFS και UCS με ταυτόχρονη αποθήκευση της διαδρομής από την αφετηρία προς τον προορισμό Ο ακόλουθος κώδικας υλοποιεί την αναζήτηση πρώτα κατά πλάτος, την αναζήτηση πρώτα κατά βάθος και την ομοιόμορφη αναζήτηση. Η υλοποίηση έχει οργανωθεί στα ακόλουθα αρχεία: lab01_graph.hpp lab01_graph.cpp lab01_search.hpp lab01_search.cpp lab01_03.cpp Σημαντικό ρόλο στην αποθήκευση των διαδρομών έχει η δομή search_node στην οποία εμπεριέχεται τόσο η διαδρομή (path) όσο και το κόστος της (cost). #include "lab01_graph.hpp" #include <set> #include <stack> #include <queue> using namespace std; struct search_node { list<string> path; int cost = 0; bool is_goal = false; bool operator<(search_node other) const { return cost > other.cost; ; // αναζήτηση πρώτα κατά βάθος void depth_first_search(struct di_graph graph, string start_vertex, string goal_vertex); // αναζήτηση πρώτα κατά πλάτος void breadth_first_search(struct di_graph graph, string start_vertex, string goal_vertex); // αναζήτηση ομοιόμορφου κόστους void uniform_cost_search(struct di_graph graph, string start_vertex, string goal_vertex); // convenience function για μεταφορά περιεχομένων στοίβας σε λίστα list<search_node> stack_to_list(stack<search_node> frontier); // convenience function για μεταφορά περιεχομένων ουράς σε λίστα 10

11 list<search_node> queue_to_list(queue<search_node> frontier); // convenience function για μεταφορά περιεχομένων ουράς προτεραιότητας σε λίστα list<search_node> priority_queue_to_list(priority_queue<search_node> frontier); // convenience function για pretty print ενός search_node string search_node_as_string(search_node sn, bool show_path_cost = true); // επιστρέφει τη λύση μαζί με το κόστος της χρησιμοποιώντας τα πλήρη ονόματα // των κόμβων του γράφου string solution_path_cost(di_graph graph, search_node sn); // convenience function για pretty print λίστας με λεκτικά string list_as_string(list<string> alist); // convenience function για pretty print συνόλου με λεκτικά string set_as_string(set<string> aset); /** * χρησιμοποιείται για να εμφανίζει κατά τη διάρκεια της αναζήτησης * το μέτωπο αναζήτησης, το κλειστό σύνολο, τον τρέχοντα κόμβο και τους * γειτονικούς κόμβους του τρέχοντα κόμβου */ void print_status(set<string> closed, list<search_node> frontier, string current_state, list<string> successors, bool show_path_cost = false); // χρησιμοποιείται μόνο για τον κόμβο αφετηρία (start_node) έτσι ώστε να // αρχικοποιήσει τη διαδρομή search_node to_search_node(string node); // προσθήκη ενός επιπλέον κόμβου στη διαδρομή που έχει ήδη δημιουργηθεί, // ενημέρωση κόστους search_node to_search_node(di_graph graph, search_node parent_sn, string node); lab01_search.hpp #include "lab01_search.hpp" using namespace std; void depth_first_search(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "DEPTH FIRST SEARCH" << endl; set<string> closed{; stack<search_node> frontier{; // LIFO frontier.push(to_search_node(start_vertex)); search_node current_state = frontier.top(); string current_state_back = current_state.path.back(); bool found{true; while (goal_vertex.compare(current_state_back)!= 0) { print_status(closed, stack_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); bool is_in{closed.find(current_state_back)!= closed.end(); if (!is_in) { // Οι γειτονικοί κόμβοι λαμβάνονται σε φθίνουσα αλφαβητική σειρά έτσι ώστε // όταν τοποθετηθούν στη στοίβα η τιμή που βρίσκεται στη κορυφή να είναι η // μικρότερη αλφαβητικά από αυτές που εισήχθησαν τελευταίες for (string v : get_successors(graph, current_state_back, false)) frontier.push(to_search_node(graph, current_state, v)); closed.insert(current_state_back); if (frontier.empty()) { found = false; break; 11

12 current_state = frontier.top(); current_state_back = current_state.path.back(); if (found) { print_status(closed, stack_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); cout << "Path to goal node found: " << solution_path_cost(graph, current_state) << endl; else cout << "Goal not found!" << endl; void breadth_first_search(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "BREADTH FIRST SEARCH" << endl; set<string> closed{; queue<search_node> frontier{; // FIFO frontier.push(to_search_node(start_vertex)); search_node current_state = frontier.front(); string current_state_back = current_state.path.back(); bool found{true; while (goal_vertex.compare(current_state_back)!= 0) { print_status(closed, queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); bool is_in{closed.find(current_state_back)!= closed.end(); if (!is_in) { for (string v : get_successors(graph, current_state_back)) frontier.push(to_search_node(graph, current_state, v)); closed.insert(current_state_back); if (frontier.empty()) { found = false; break; current_state = frontier.front(); current_state_back = current_state.path.back(); if (found) { print_status(closed, queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); cout << "Path to goal node found: " << solution_path_cost(graph, current_state) << endl; else cout << "Goal not found!" << endl; void uniform_cost_search(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "UNIFORM COST SEARCH" << endl; set<string> closed{; priority_queue<search_node> frontier{; // MIN HEAP frontier.push(to_search_node(start_vertex)); search_node current_state = frontier.top(); string current_state_back = current_state.path.back(); bool found{true; while (goal_vertex.compare(current_state_back)!= 0) { print_status(closed, priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back), true); bool is_in{closed.find(current_state_back)!= closed.end(); if (!is_in) { for (string v : get_successors(graph, current_state_back)) frontier.push(to_search_node(graph, current_state, v)); closed.insert(current_state_back); 12

13 if (frontier.empty()) { found = false; break; current_state = frontier.top(); current_state_back = current_state.path.back(); if (found) { print_status(closed, priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back), true); cout << "Path to goal node found: " << solution_path_cost(graph, current_state) << endl; else cout << "Goal not found!" << endl; list<search_node> stack_to_list(stack<search_node> frontier) { list<search_node> alist{; while (!frontier.empty()) { alist.push_back(frontier.top()); return alist; list<search_node> queue_to_list(queue<search_node> frontier) { list<search_node> alist{; while (!frontier.empty()) { alist.push_back(frontier.front()); return alist; list<search_node> priority_queue_to_list(priority_queue<search_node> frontier) { list<search_node> alist{; while (!frontier.empty()) { alist.push_back(frontier.top()); return alist; string search_node_as_string(search_node sn, bool show_path_cost) { string s{; s.append("("); for (string v : sn.path) { s.append(v); s.append("-"); if (s.length() > 1) s.pop_back(); if (show_path_cost) { s.append(" "); s.append(to_string(sn.cost)); s.append(")"); return s; string solution_path_cost(di_graph graph, search_node sn) { string s{; s.append("("); for (string v : sn.path) { s.append(graph.vertices_full_names[get_vertex_index(graph, v)]); s.append("-"); 13

14 if (s.length() > 1) s.pop_back(); s.append(" "); s.append(to_string(sn.cost)); s.append(")"); return s; string list_as_string(list<string> alist) { string s{; s.append("["); for (string v : alist) { s.append(v); s.append(" "); if (s.length() > 1) s.pop_back(); s.append("]"); return s; string set_as_string(set<string> aset) { string s{; s.append("["); for (string v : aset) { s.append(v); s.append(" "); if (s.length() > 1) s.pop_back(); s.append("]"); return s; void print_status(set<string> closed, list<search_node> frontier, string current_state, list<string> successors, bool show_path_cost) { cout << "frontier:["; for (search_node sn : frontier) cout << search_node_as_string(sn, show_path_cost); cout << "]"; cout << " closed set:" << set_as_string(closed); cout << " current node:" << current_state; bool is_in{closed.find(current_state)!= closed.end(); if (is_in) cout << " successors:[loop]" << endl; else { cout << " successors:" << list_as_string(successors) << endl; search_node to_search_node(string node) { search_node sn{; sn.path.push_back(node); sn.cost = 0; return sn; search_node to_search_node(di_graph graph, search_node parent_sn, string node) { search_node sn{; for (string v : parent_sn.path) { sn.path.push_back(v); sn.path.push_back(node); sn.cost = parent_sn.cost + get_weight(graph, parent_sn.path.back(), node); 14

15 return sn; lab01_search.cpp #include "lab01_search.hpp" int main(int argc, char **argv) { struct di_graph graph { ; string fn{; string start_vertex{, goal_vertex{, search_method{; if (argc == 5) { fn = argv[1]; start_vertex = argv[2]; goal_vertex = argv[3]; search_method = argv[4]; graph = read_data(fn); if (search_method.compare("bfs") == 0) breadth_first_search(graph, start_vertex, goal_vertex); else if (search_method.compare("dfs") == 0) depth_first_search(graph, start_vertex, goal_vertex); else if (search_method.compare("ucs") == 0) uniform_cost_search(graph, start_vertex, goal_vertex); else cerr << "invalid option" << endl; free_memory(graph); lab01_03.cpp Ο κώδικας μεταγλωττίζεται με την εντολή: g++ lab01_graph.cpp lab01_search.cpp lab01_03.cpp -o lab01_03 -Wall -std=c++11 Eύρεση διαδρομής από Craiova προς Bucharest με BFS./lab01_03 data/tour_romania.txt C B bfs BREADTH FIRST SEARCH frontier:[(c)] closed set:[] current node:c successors:[d P R] frontier:[(c-d)(c-p)(c-r)] closed set:[c] current node:d successors:[c M] frontier:[(c-p)(c-r)(c-d-c)(c-d-m)] closed set:[c D] current node:p successors:[b C R] frontier:[(c-r)(c-d-c)(c-d-m)(c-p-b)(c-p-c)(c-p-r)] closed set:[c D P] current node:r successors:[c P S] frontier:[(c-d-c)(c-d-m)(c-p-b)(c-p-c)(c-p-r)(c-r-c)(c-r-p)(c-r-s)] closed set:[c D P R] current node:c successors:[loop] frontier:[(c-d-m)(c-p-b)(c-p-c)(c-p-r)(c-r-c)(c-r-p)(c-r-s)] closed set:[c D P R] current node:m successors:[d L] frontier:[(c-p-b)(c-p-c)(c-p-r)(c-r-c)(c-r-p)(c-r-s)(c-d-m-d)(c-d-m-l)] closed set:[c D M P R] current node:b successors:[f G P U] Path to goal node found: (Craiova-Pitesti-Bucharest 239) Eύρεση διαδρομής από Craiova προς Bucharest με DFS lab01_03 data/tour_romania.txt C B dfs DEPTH FIRST SEARCH frontier:[(c)] closed set:[] current node:c successors:[d P R] frontier:[(c-d)(c-p)(c-r)] closed set:[c] current node:d successors:[c M] frontier:[(c-d-c)(c-d-m)(c-p)(c-r)] closed set:[c D] current node:c successors:[loop] frontier:[(c-d-m)(c-p)(c-r)] closed set:[c D] current node:m successors:[d L] frontier:[(c-d-m-d)(c-d-m-l)(c-p)(c-r)] closed set:[c D M] current node:d successors:[loop] frontier:[(c-d-m-l)(c-p)(c-r)] closed set:[c D M] current node:l successors:[m T] frontier:[(c-d-m-l-m)(c-d-m-l-t)(c-p)(c-r)] closed set:[c D L M] current node:m successors:[loop] frontier:[(c-d-m-l-t)(c-p)(c-r)] closed set:[c D L M] current node:t successors:[a L] frontier:[(c-d-m-l-t-a)(c-d-m-l-t-l)(c-p)(c-r)] closed set:[c D L M T] current node:a successors:[s T Z] frontier:[(c-d-m-l-t-a-s)(c-d-m-l-t-a-t)(c-d-m-l-t-a-z)(c-d-m-l-t-l)(c-p)(c-r)] closed set:[a C D L M T] current node:s successors:[a F O R] frontier:[(c-d-m-l-t-a-s-a)(c-d-m-l-t-a-s-f)(c-d-m-l-t-a-s-o)(c-d-m-l-t-a-s-r)(c-d-m-l-t-a-t)(c-d-m-l-t-a-z)(c-d-m- L-T-L)(C-P)(C-R)] closed set:[a C D L M S T] current node:a successors:[loop] frontier:[(c-d-m-l-t-a-s-f)(c-d-m-l-t-a-s-o)(c-d-m-l-t-a-s-r)(c-d-m-l-t-a-t)(c-d-m-l-t-a-z)(c-d-m-l-t-l)(c-p)(c-r)] closed set:[a C D L M S T] current node:f successors:[b S] frontier:[(c-d-m-l-t-a-s-f-b)(c-d-m-l-t-a-s-f-s)(c-d-m-l-t-a-s-o)(c-d-m-l-t-a-s-r)(c-d-m-l-t-a-t)(c-d-m-l-t-a-z)(c- D-M-L-T-L)(C-P)(C-R)] closed set:[a C D F L M S T] current node:b successors:[f G P U] Path to goal node found: (Craiova-Drobeta-Mehadia-Lugoj-Timisoara-Arad-Sibiu-Fagaras-Bucharest 944) 15

16 Eύρεση διαδρομής από Craiova προς Bucharest με UCS lab01_03 data/tour_romania.txt C B ufs UNIFORM COST SEARCH frontier:[(c 0)] closed set:[] current node:c successors:[d P R] frontier:[(c-d 120)(C-P 138)(C-R 146)] closed set:[c] current node:d successors:[c M] frontier:[(c-p 138)(C-R 146)(C-D-M 195)(C-D-C 240)] closed set:[c D] current node:p successors:[b C R] frontier:[(c-r 146)(C-D-M 195)(C-P-R 235)(C-P-B 239)(C-D-C 240)(C-P-C 276)] closed set:[c D P] current node:r successors:[c P S] frontier:[(c-d-m 195)(C-R-S 226)(C-P-R 235)(C-P-B 239)(C-D-C 240)(C-R-P 243)(C-P-C 276)(C-R-C 292)] closed set:[c D P R] current node:m successors:[d L] frontier:[(c-r-s 226)(C-P-R 235)(C-P-B 239)(C-D-C 240)(C-R-P 243)(C-D-M-L 265)(C-D-M-D 270)(C-P-C 276)(C-R-C 292)] closed set:[c D M P R] current node:s successors:[a F O R] frontier:[(c-p-r 235)(C-P-B 239)(C-D-C 240)(C-R-P 243)(C-D-M-L 265)(C-D-M-D 270)(C-P-C 276)(C-R-C 292)(C-R-S-R 306)(C-R-S-F 325)(C-R-S-A 366)(C-R-S-O 377)] closed set:[c D M P R S] current node:r successors:[loop] frontier:[(c-p-b 239)(C-D-C 240)(C-R-P 243)(C-D-M-L 265)(C-D-M-D 270)(C-P-C 276)(C-R-C 292)(C-R-S-R 306)(C-R-S-F 325)(C-R-S-A 366)(C-R-S-O 377)] closed set:[c D M P R S] current node:b successors:[f G P U] Path to goal node found: (Craiova-Pitesti-Bucharest 239) Αναφορές 1. [Ertel11] Introduction to Artificial Intelligence, Wolfgang Ertel, Springer, [Norvig03] Τεχνητή Νοημοσύνη μια σύγχρονη προσέγγιση, Β έκδοση, Stuart Russell, Peter Norvig, Εκδόσεις Κλειδάριθμος, [Βλαχαβάς06] Τεχνητή Νοημοσύνη, Γ έκδοση, Ι. Βλαχαβάς, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκορας, Η. Σακελλαρίου, Γκιούρδας Εκδοτική, Σύνδεσμοι οπτικής απεικόνισης (visualization) αλγορίθμων BFS και DFS

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση)

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση) Version 1.5.1 (24/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 1

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 1 Version 1.5.1 (24/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2 Version 1.5 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η.

Κεφάλαιο 3. Αλγόριθµοι Τυφλής Αναζήτησης. Τεχνητή Νοηµοσύνη - Β' Έκδοση. Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Κεφάλαιο 3 Αλγόριθµοι Τυφλής Αναζήτησης Τεχνητή Νοηµοσύνη - Β' Έκδοση Ι. Βλαχάβας, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκκορας, Η. Σακελλαρίου Αλγόριθµοι Τυφλής Αναζήτησης Οι αλγόριθµοι τυφλής αναζήτησης (blind

Διαβάστε περισσότερα

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1 Αναζήτηση σε Γράφους Μανόλης Κουμπαράκης ΥΣ02 Τεχνητή Νοημοσύνη 1 Πρόλογος Μέχρι τώρα έχουμε δει αλγόριθμους αναζήτησης για την περίπτωση που ο χώρος καταστάσεων είναι δένδρο (υπάρχει μία μόνο διαδρομή

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Αναζήτηση Δοθέντος ενός προβλήματος με περιγραφή είτε στον χώρο καταστάσεων

Διαβάστε περισσότερα

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 9: Εισαγωγή στους Γράφους Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Γράφοι - ορισμοί και υλοποίηση Διάσχιση Γράφων Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαβάστε περισσότερα

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1 ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1 Θέματα μελέτης Πρόβλημα αναζήτησης σε γραφήματα Αναζήτηση κατά βάθος (Depth-first search DFS) Αναζήτηση κατά πλάτος (Breadth-first search BFS) 2 Γράφημα (graph) Αναπαράσταση συνόλου

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 18 Dijkstra s Shortest Path Algorithm 1 / 12 Ο αλγόριθμος εύρεσης της συντομότερης διαδρομής του Dijkstra

Διαβάστε περισσότερα

Αλγόριθμοι Τυφλής Αναζήτησης

Αλγόριθμοι Τυφλής Αναζήτησης Τεχνητή Νοημοσύνη 04 Αλγόριθμοι Τυφλής Αναζήτησης Αλγόριθμοι Τυφλής Αναζήτησης (Blind Search Algorithms) Εφαρμόζονται σε προβλήματα στα οποία δεν υπάρχει πληροφορία που να επιτρέπει αξιολόγηση των καταστάσεων.

Διαβάστε περισσότερα

Φροντιςτήριο. Linked-List

Φροντιςτήριο. Linked-List Φροντιςτήριο Linked-List 1 Linked List Μια linked list είναι μια ακολουθία από ςυνδεδεμένουσ κόμβουσ Κάθε κόμβοσ περιέχει τουλάχιςτον Μια πληροφορία (ή ένα struct) Δείκτη ςτον επόμενο κόμβο τησ λίςτασ

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή raniah@hua.gr 1 Αλγόριθμοι Τυφλής Αναζήτησης Οι αλγόριθμοι τυφλής αναζήτησης εφαρμόζονται σε

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου Γκόγκος Χρήστος 04/12/2014 Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης) Στην εργασία αυτή παρουσιάζεται

Διαβάστε περισσότερα

Επίλυση Προβλημάτων. Αποτελεί ένα από τα βασικά χαρακτηριστικά γνωρίσματα της νοημοσύνης.

Επίλυση Προβλημάτων. Αποτελεί ένα από τα βασικά χαρακτηριστικά γνωρίσματα της νοημοσύνης. Επίλυση Προβλημάτων Αποτελεί ένα από τα βασικά χαρακτηριστικά γνωρίσματα της νοημοσύνης. Τεχνητή Νοημοσύνη = Αναπαράσταση Γνώσης + Αλγόριθμοι Αναζήτησης Κατηγορίες Προβλημάτων Aναζήτησης Πραγματικά και

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη 2005. Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 10 ο Γράφοι Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Γράφοι Ορισµός Αφηρηµένος τύπος δεδοµένων Υλοποίηση Αναζήτηση έντρο

Διαβάστε περισσότερα

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ

ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ ΤΕΙ Δυτικής Μακεδονίας ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ 2015-2016 Τεχνητή Νοημοσύνη Επίλυση προβλημάτων με αναζήτηση Διδάσκων: Τσίπουρας Μάρκος Εκπαιδευτικό Υλικό: Τσίπουρας Μάρκος http://ai.uom.gr/aima/ 2

Διαβάστε περισσότερα

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 9: Γράφοι Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Γράφοι - ορισμοί και υλοποίηση - Διάσχιση Γράφων Διδάσκων: Παναγιώτης νδρέου ΕΠΛ035 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ.

Διαβάστε περισσότερα

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V Γράφοι Ορολογία γράφος ή γράφηµα (graph) Ορισµός: G = (V, E) όπου V:ένα σύνολο E:µια διµελής σχέση στο V Ορολογία (συνέχεια) κάθε v V ονοµάζεται κορυφή (vertex) ή κόµβος (node) κάθε (v 1, v 2 ) Ε ονοµάζεται

Διαβάστε περισσότερα

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1 Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Διάσχιση Γράφων Τοπολογική Ταξινόµηση ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι - Γράφοι Η πιο γενική µορφή δοµής

Διαβάστε περισσότερα

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Τοπολογική Ταξινόµηση ιάσχιση Γράφων ΕΠΛ 23 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26 - Γράφοι Ηπιο

Διαβάστε περισσότερα

HY150a Φροντιστήριο 3 24/11/2017

HY150a Φροντιστήριο 3 24/11/2017 HY150a Φροντιστήριο 3 24/11/2017 1 Assignment 3 Overview Το πρόγραμμα ζητείται να διαβάζει μια λίστα δεδομένων που περιγράφει τα διαθέσιμα τμήματα μνήμης (blocks) ενός ΗΥ. Το πρόγραμμα ζητείται να μεταφορτώνει

Διαβάστε περισσότερα

Εισαγωγή στους Αλγόριθμους

Εισαγωγή στους Αλγόριθμους Εισαγωγή στους Αλγόριθμους Εύη Παπαϊωάννου Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διαχείρισης Πολιτισμικού Περιβάλλοντος και Νέων Τεχνολογιών Σκοποί ενότητας Παρουσίαση και μελέτη αλγορίθμων

Διαβάστε περισσότερα

Επίλυση προβλημάτων με αναζήτηση

Επίλυση προβλημάτων με αναζήτηση Επίλυση προβλημάτων με αναζήτηση Περιεχόμενα Μέθοδοι (πράκτορες) επίλυσης προβλημάτων Προβλήματα και Λύσεις Προβλήματα παιχνίδια Προβλήματα του πραγματικού κόσμου Αναζήτηση λύσεων Δέντρο αναζήτησης Στρατηγικές

Διαβάστε περισσότερα

Μάθημα 21: Ουρές (Queues)

Μάθημα 21: Ουρές (Queues) Queues Page 1 Μάθημα 21: Ουρές (Queues) Η ουρά (queue) είναι μια δομή δεδομένων. Η βασική λειτουργικότητα είναι η εισαγωγή στοιχείων στην πίσω θέση και η εξαγωγή-διαγραφή στοιχείων από την μπροστινή θέση.

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 14 Στοίβες 1 / 14 Στοίβες Η στοίβα είναι μια ειδική περίπτωση γραμμικής λίστας στην οποία οι εισαγωγές

Διαβάστε περισσότερα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Λίστες -Υλοποίηση ταξινομημένης λίστας με δυναμική δέσμευση μνήμης ΕΠΛ035

Διαβάστε περισσότερα

Αντικειμενοστραφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Αντικειμενοστραφής Προγραμματισμός Ενότητα 5 : Δομή Προγράμματος C++ Ιωάννης Τσούλος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο Τμήμα Μηχανικών Πληροφορικής

Διαβάστε περισσότερα

Αναζήτηση στους γράφους. - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών

Αναζήτηση στους γράφους. - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών Αναζήτηση στους γράφους Βασικός αλγόριθμος λό - Αναζήτηση κατά πλάτος - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών Διάσχιση (αναζήτηση ) στους γράφους Φεύγοντας

Διαβάστε περισσότερα

Θεωρία Λήψης Αποφάσεων

Θεωρία Λήψης Αποφάσεων Θεωρία Λήψης Αποφάσεων Ενότητα 5: Πληροφορημένη Αναζήτηση και Εξερεύνηση Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων & Τροφίμων (Δ.Ε.Α.Π.Τ.)

Διαβάστε περισσότερα

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα: #2 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος Ερώτημα Α 1. Να γράψετε τις εντολές

Διαβάστε περισσότερα

Αναζήτηση με αντιπαλότητα (Adversarial Search)

Αναζήτηση με αντιπαλότητα (Adversarial Search) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό εξάμηνο Αναζήτηση με αντιπαλότητα

Διαβάστε περισσότερα

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ! Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Φεβρουαρίου 2010. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το

Διαβάστε περισσότερα

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή Εργαστήριο 10 Γράφηµα (Graph) Εισαγωγή Στην πληροφορική γράφηµα ονοµάζεται µια δοµή δεδοµένων, που αποτελείται από ένα σύνολο κορυφών ( vertices) (ή κόµβων ( nodes» και ένα σύνολο ακµών ( edges). Ενας

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 8: Αφηρημένοι Τύποι Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων (ΑΤΔ) Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά με Στατική Δέσμευση

Διαβάστε περισσότερα

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Δομές Δεδομένων και Αλγόριθμοι (εργαστήριο) Γκόγκος Χρήστος #4. Heaps (σωροί), η ταξινόμηση HeapSort,

Διαβάστε περισσότερα

Συλλογές, Στοίβες και Ουρές

Συλλογές, Στοίβες και Ουρές Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει

Διαβάστε περισσότερα

Βασικές Δομές Δεδομένων

Βασικές Δομές Δεδομένων Βασικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αφηρημένοι Τύποι Δεδομένων Οι ΑΤΔ Στοίβα και Ουρά Υλοποίηση των ΑΤΔ Στοίβα και Ουρά με Διαδοχική και Δυναμική Χορήγηση

Διαβάστε περισσότερα

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες

Διαβάστε περισσότερα

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

6η Διάλεξη Διάσχιση Γράφων και Δέντρων ΘΕΩΡΙΑ ΓΡΑΦΩΝ 6 η Διάλεξη Διάσχιση Γράφων και Δέντρων Αλγόριθμος αναζήτησης σε Βαθος Αλγόριθμος αναζήτησης κατά Πλάτος Αλγόριθμοι για Δένδρα Εύρεση ελαχίστων Γεννητορικών (Επικαλύπτοντα) Δένδρων Διάσχιση

Διαβάστε περισσότερα

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 3 Version 1.0 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 3: Αλγόριθμοι πληροφορημένης αναζήτησης. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 3: Αλγόριθμοι πληροφορημένης αναζήτησης. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 3: Αλγόριθμοι πληροφορημένης αναζήτησης Ρεφανίδης Ιωάννης Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 10: Στοίβες:Υλοποίηση& Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης - Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις - Εφαρμογή

Διαβάστε περισσότερα

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου

Γραμμικές λίστες. Γκόγκος Χρήστος ΤΕΙ Ηπείρου Γραμμικές λίστες Γκόγκος Χρήστος ΤΕΙ Ηπείρου Στατική αναπαράσταση γραμμικής λίστας const int MAX = 50000; struct static_list { T elements[max]; int size = 0; ; https://www.securecoding.cert.org/confluence/display/cplusplus/ctr00-cpp.+understand+when+to+prefer+vectors+over+arrays

Διαβάστε περισσότερα

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής ισαγωγή στην πιστήμη των Υπολογιστών 2015-16 λγόριθμοι και ομές εδομένων (IΙ) (γράφοι και δένδρα) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης φηρημένες

Διαβάστε περισσότερα

(elementary graph algorithms)

(elementary graph algorithms) (elementary graph algorithms) Παύλος Εφραιμίδης περιεχόμενα αναπαραστάσεις οριζόντια διερεύνηση καθοδική διερεύνηση αναπαράσταση δύο καθιερωμένοι τρόποι: πίνακας γειτνίασης συλλογή από καταλόγους γειτνίασης

Διαβάστε περισσότερα

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Υλοποίηση Λιστών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμές Απλά και Διπλά Συνδεδεμένες Λίστες Κυκλικές Απλά και Διπλά Συνδεδεμένες Λίστες Τεχνικές Μείωσης Μνήμης ΕΠΛ 231 Δομές

Διαβάστε περισσότερα

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( ) Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική

Διαβάστε περισσότερα

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Τεχνητή Νοημοσύνη. Ενότητα 2: Αναζήτηση (Search)

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Τεχνητή Νοημοσύνη. Ενότητα 2: Αναζήτηση (Search) Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Τεχνητή Νοημοσύνη Ενότητα 2: Αναζήτηση (Search) Αν. καθηγητής Στεργίου Κωνσταντίνος kstergiou@uowm.gr Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Άδειες

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 2: Δένδρο αναζήτησης. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 2: Δένδρο αναζήτησης. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 2: Δένδρο αναζήτησης Ρεφανίδης Ιωάννης Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου

Διαβάστε περισσότερα

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Τοπολογική Ταξινόμηση - Εφαρμογές, Παραδείγματα, Αλγόριθμοι

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035). Βασικές Δοµές Δεδοµένων Σύντοµη επανάληψη (ΕΠΛ 035). Περίληψη Γραµµικές Δοµές Δεδοµένων Πίνακες Λίστες Στοίβες Ουρές Γράφοι Δέντρα Γραµµικές Δοµές Πίνακας (array) A[0] A[1] A[2] A[ ] A[n-1] Προκαθορισµένη

Διαβάστε περισσότερα

ΠΛΗ 405 Τεχνητή Νοηµοσύνη

ΠΛΗ 405 Τεχνητή Νοηµοσύνη ΠΛΗ 405 Τεχνητή Νοηµοσύνη Πληροφορηµένη Αναζήτηση Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υ ολογιστών Πολυτεχνείο Κρήτης Ε ανάληψη Πράκτορας ε ίλυσης ροβληµάτων πράκτορας µε στόχο Αναζήτηση διατύπωση

Διαβάστε περισσότερα

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ! Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Προγραμματισμός Υπολογιστών με C++ Εξεταστική περίοδος: Σεπτεμβρίου 2011. Διδάσκων: Α. Δημάκης Γράψτε όλες τις απαντήσεις σας πάνω σε αυτό το

Διαβάστε περισσότερα

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΝΔΕΙΚΤΙΚΕΣ ΑΠΑΝΤΗΣΕΙΣ Γ ΦΑΣΗΣ Θέμα 1 ο : Λουτράκι [30 Μονάδες] C++ Παναγιώτου Σωτήριος 59 ο ΓΕΛ Αθηνών /* USER:pdp24u226 TASK:loutraki LANG:C++ */ #include

Διαβάστε περισσότερα

ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ

ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ ÌïëëÜ Ì. Á μýô Á.Ì. : 5 moll@moll.r ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ ΜΑΘΗΜΑ : ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΤΥΟ (ΕΡΓΑΣΤΗΡΙΟ) Ε ΕΞΑΜΗΝΟ ΕΙΣΗΓΗΤΕΣ: Χαϊδόγιαννος Χαράλαμπος ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ

Διαβάστε περισσότερα

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο) Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου http://www.cs.ucy.ac.cy/courses/epl232 Το μάθημα αυτό

Διαβάστε περισσότερα

1 Διάσχιση κατευθυνόμενων γραφημάτων

1 Διάσχιση κατευθυνόμενων γραφημάτων ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2010 11 Ιστοσελίδα μαθήματος: http://eclass.teilam.gr/di288 5ο ΕΡΓΑΣΤΗΡΙΟ

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 5η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Τι θα ακούσετε σήμερα Πίνακες ως ορίσματα συναρτήσεων. Τα ορίσματα argc και argv της main.

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 16 Δένδρα (Trees) 1 / 42 Δένδρα (Trees) Ένα δένδρο είναι ένα συνδεδεμένο γράφημα χωρίς κύκλους Για κάθε

Διαβάστε περισσότερα

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής Στοίβες - Ουρές Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής οµές εδοµένων 1 Στοίβα (stack) οµή τύπουlifo: Last In - First Out (τελευταία εισαγωγή πρώτη εξαγωγή) Περιορισµένος

Διαβάστε περισσότερα

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

Βασικές Έννοιες Δοµών Δεδοµένων

Βασικές Έννοιες Δοµών Δεδοµένων Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες

Διαβάστε περισσότερα

Συµβολοσειρές - Strings

Συµβολοσειρές - Strings Συµβολοσειρές - Strings 1 Συµβολοσειρέςστην C/C++ 2 Χαρακτήρες 'a', 'z', '0', Χαρακτήρες σαν int 'z' επίσης αναπαριστά την ακεραία τιµή του χαρακτήρα z Strings-Συµβολοσειρές Σειρές από χαρακτήρες σαν µια

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Βασικές οµές εδοµένων

Βασικές οµές εδοµένων Βασικές οµές εδοµένων Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Αφηρηµένοι Τύποι εδοµένων Οι ΑΤ Στοίβα και Ουρά Υλοποίηση των ΑΤ Στοίβα και Ουρά µε ιαδοχική και υναµική Χορήγηση Μνήµης

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI 20 ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Με εξαίρεση το 3ο θέμα, στα 2 πρώτα, υποβλήθηκαν περισσότερες από μία βέλτιστες λύσεις (100% σημείων επιτυχίας). Από αυτές τελείως

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #11

ιαφάνειες παρουσίασης #11 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

Διορθώσεις σελ

Διορθώσεις σελ Διορθώσεις σελ. 73-74 # Τώρα ο άνθρωπος σκέφτεται έναν αριθμό από 1 έως 1000 Ν = 1000 print Σκέψου έναν αριθμό από το 1 έως το, Ν guesses = 0 found = False first = 1 last = N while not found and guesses

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ ΠΝΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΣ ΔΔΟΜΝΩΝ ΚΙ ΛΓΟΡΙΘΜΟΙ ΗΜΡΟΜΗΝΙ: 14/11/2018 ΔΙΓΝΩΣΤΙΚΟ ΠΝΩ Σ ΔΝΔΡΙΚΣ ΔΟΜΣ ΚΙ ΓΡΦΟΥΣ Διάρκεια: 45 λεπτά Ονοματεπώνυμο:. ρ. Ταυτότητας:. ΒΘΜΟΛΟΓΙ ΣΚΗΣΗ ΒΘΜΟΣ

Διαβάστε περισσότερα

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. Κεφάλαιο 3 Γραφήματα ver. 21/12/2014 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 3.1 Βασικοί Ορισμοί και Εφαρμογές γραφήματα γράφημα G: ένας τρόπος κωδικοποίησης των σχέσεων ανά

Διαβάστε περισσότερα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

Επίλυση Προβλημάτων 1

Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων 1 Επίλυση Προβλημάτων Περιγραφή Προβλημάτων Αλγόριθμοι αναζήτησης Αλγόριθμοι τυφλής αναζήτησης Αναζήτηση πρώτα σε βάθος Αναζήτηση πρώτα σε πλάτος (ΒFS) Αλγόριθμοι ευρετικής αναζήτησης

Διαβάστε περισσότερα

Αλγόριθμοι Γραφημάτων

Αλγόριθμοι Γραφημάτων Αλγόριθμοι Γραφημάτων 1. Συντομότατα μονοπάτια 2. Αλγόριθμος Bellman-Ford 3. Αλγόριθμος Dijkstra 4. Floyd-Warshall Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Single-Source Shortest Path Πρόβλημα:

Διαβάστε περισσότερα

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες

Διαβάστε περισσότερα

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 17 Σωροί (Heaps) έκδοση 10 1 / 19 Heap Σωρός Ο σωρός είναι μια μερικά ταξινομημένη δομή δεδομένων που υποστηρίζει

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη. 4η διάλεξη ( ) Ίων Ανδρουτσόπουλος. Τεχνητή Νοημοσύνη 4η διάλεξη (2016-17) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται κυρίως στα βιβλία Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β.

Διαβάστε περισσότερα

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα

Διαβάστε περισσότερα

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 (α) Ο αλγόριθµος χρησιµοποιεί τη διαδικασία DFS(v) η οποία, ως γνωστό, επισκέπτεται όλους τους κόµβους που είναι συνδεδεµένοι µε τον κόµβο v. Για να µετρήσουµε

Διαβάστε περισσότερα

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 Χρησιμοποιούμε τις δομές: struct hashtable { struct node array[maxsize]; int maxsize; int size; struct node{ int data; int status; Στο πεδίο status σημειώνουμε

Διαβάστε περισσότερα

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ Ενότητα: Συναρτήσεις και ορίσματα Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης Τμήμα: Οικονομικών Επιστημών Διαφορά καθολικής μεταβλητής και σταθεράς

Διαβάστε περισσότερα

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. Κεφάλαιο 3 Γραφήματα v1.3 (2014-01-30) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 3.1 Βασικοί Ορισμοί και Εφαρμογές γραφήματα γράφημα G: ένας τρόπος κωδικοποίησης των σχέσεων

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ οµηµένος Προγραµµατισµός Ανοιξη 5 Μάθηµα 5 ο Ουρά Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση Αφηρηµένος Τύπος εδοµένων Ουρά Υλοποίηση µε Κυκλικό Πίνακα Υλοποίηση

Διαβάστε περισσότερα

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/

Τεχνητή Νοημοσύνη. 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος. http://www.aueb.gr/users/ion/ Τεχνητή Νοημοσύνη 2η διάλεξη (2015-16) Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 1 Οι διαφάνειες αυτής της διάλεξης βασίζονται στα βιβλία: Τεχνητή Νοημοσύνη των Βλαχάβα κ.ά., 3η έκδοση, Β. Γκιούρδας

Διαβάστε περισσότερα

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό 2013-14 Διδάσκων: Γεώργιος Παπαϊωάννου Μονογραφή επιτηρητή: Στοιχεία Φοιτητή (συμπληρώνεται από το φοιτητή) Όνομα: Αίθουσα/αμφιθέατρο:

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 9: Στοίβες:Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Υλοποίηση Στοιβών με Δυναμική Δέσμευση Μνήμης Εφαρμογή Στοιβών 1: Αναδρομικές συναρτήσεις Εφαρμογή

Διαβάστε περισσότερα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

ΑΛΓΟΡΙΘΜΟΙ  Άνοιξη I. ΜΗΛΗΣ ΑΛΓΟΡΙΘΜΟΙ http://eclass.aueb.gr/courses/inf161/ Άνοιξη 2017 - I. ΜΗΛΗΣ AΛΓΟΡΙΘΜΟΙ ΓΡΑΦΩΝ Ι ΕΞΕΡΕΥΝΗΣΗ 1 Graphs Ανά ζεύγη (pairwise) σχέσεις μεταξύ των στοιχείων ενός συνόλου 2 Graphs Εφαρμογές Χάρτες,

Διαβάστε περισσότερα

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 10: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) Σύγκριση Συνδεδεμένων Λιστών με Πίνακες

Διαβάστε περισσότερα

Επίλυση προβληµάτων. Αλγόριθµοι Αναζήτησης

Επίλυση προβληµάτων. Αλγόριθµοι Αναζήτησης Επίλυση προβληµάτων! Περιγραφή προβληµάτων Αλγόριθµοι αναζήτησης Αλγόριθµοι τυφλής αναζήτησης Αλγόριθµοι ευρετικής αναζήτησης Παιχνίδια δύο αντιπάλων Προβλήµατα ικανοποίησης περιορισµών Γενικά " Τεχνητή

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού

Διαβάστε περισσότερα

Εργαστήριο 2: Πίνακες

Εργαστήριο 2: Πίνακες Εργαστήριο 2: Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Επεξεργασία Πινάκων - Υλοποίηση της Δυαδικής Αναζήτησης σε πίνακες - Υλοποίηση της Ταξινόμησης με Επιλογής σε πίνακες ΕΠΛ035

Διαβάστε περισσότερα

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to Κεφάλαιο 2 Δοµές Δεδοµένων Ι Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Δοµές Δεδοµένων Ι Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Πρατικάκης (CSD) Απλές Λίστες CS100, 2015-2016 1 / 10 Δομές δεδομένων Ορισμός:

Διαβάστε περισσότερα