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

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

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

Transcript

1 Version (24/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος εαρινό εξάμηνο Ευρετική αναζήτηση (πληροφορημένη αναζήτηση) Οι ευρετικές τεχνικές (heuristic techniques) είναι τεχνικές επίλυσης προβλημάτων που χρησιμοποιούν κάποια γνώση για το προς επίλυση πρόβλημα έτσι ώστε να οδηγηθούν στη γρήγορη επίλυσή του. Πλεονεκτήματά τους είναι ότι δίνουν καλά αποτελέσματα και ότι απαιτούν λιγότερο χρόνο σε σχέση με άλλες προσεγγίσεις. Ωστόσο πολλές φορές οι ευρετικές τεχνικές δεν μπορούν να εγγυηθούν ότι η συμπεριφορά αυτή θα ισχύει για όλες τις διαφορετικές περιπτώσεις προβλημάτων. Η ευρετική αναζήτηση χρησιμοποιεί την λεγόμενη ευρετική συνάρτηση (heuristic function) που για κάθε κατάσταση S του προβλήματος επιστρέφει μια αριθμητική τιμή που αποτελεί εκτίμηση της απόστασης της κατάστασης S από την κατάσταση στόχο G. Η τιμή που επιστρέφεται από την ευρετική συνάρτηση συμμετέχει στην επιλογή ανάμεσα στις εναλλακτικές καταστάσεις που πρέπει να εξεταστούν κατά τη διάρκεια της αναζήτησης. Στη συνέχεια θα εξεταστούν 3 αλγόριθμοι ευρετικής αναζήτησης: ο αλγόριθμος αναρρίχησης λόφου, ο αλγόριθμος αναζήτησης πρώτα στο καλύτερο και ο αλγόριθμος Α* [Amit], [Norvig03], [Βλαχαβάς06]. Αναρρίχηση λόφου (HC=Hill Climbing) Στον αλγόριθμο αναρρίχησης λόφου (HC) επιλέγεται σε κάθε βήμα από τις καταστάσεις παιδιά η κατάσταση για την οποία η ευρετική συνάρτηση επιστρέφει την καλύτερη τιμή. Όλες οι υπόλοιπες καταστάσεις απορρίπτονται. Η κατάσταση που επιλέγεται εφόσον έχει καλύτερη τιμή από την τρέχουσα κατάσταση επεκτείνεται και για τα παιδιά της ακολουθείται η ίδια διαδικασία. Αν δεν παρουσιαστεί πρόοδος σε κάποιο βήμα τότε ο αλγόριθμος αναρρίχησης λόφου καταλήγει σε αδιέξοδο. Συνεπώς, ο αλγόριθμος αναρρίχησης λόφου διατηρεί ανά πάσα στιγμή στο μέτωπο αναζήτησης μόνο μια κατάσταση. Ο αλγόριθμος HC δεν παρέχει εγγύηση ότι θα βρει λύση. Μπορεί να καταλήξει σε αδιέξοδο ενώ υπάρχει λύση. Ψευδοκώδικας για τον αλγόριθμο αναρρίχησης λόφου (Βλαχαβάς06) Αναζήτηση πρώτα στο καλύτερο (BestFS=Best First Search) Ο αλγόριθμος αναζήτησης πρώτα στο καλύτερο (BestFS) λειτουργεί παρόμοια με την αναρρίχηση λόφου με τη διαφορά ότι διατηρεί όλες τις καταστάσεις στο μέτωπο αναζήτησης. Σε κάθε βήμα επιλέγεται η κατάσταση για την οποία η ευρετική συνάρτηση επιστρέφει την καλύτερη τιμή. Αν η κατάσταση που επιλέχθηκε είναι η κατάσταση στόχος τότε η αναζήτηση τερματίζεται επιτυχώς. Αλλιώς αφαιρείται από το μέτωπο αναζήτησης, προστίθεται στο 1

2 κλειστό σύνολο και επεκτείνεται (δηλαδή οι γειτονικές καταστάσεις της εισέρχονται στο μέτωπο αναζήτησης). Θα πρέπει να σημειωθεί ότι η αναζήτηση BestFS λαμβάνει υπόψη για την επιλογή της τρέχουσας κατάστασης από το μέτωπο αναζήτησης μόνο την εκτίμηση της ευρετικής συνάρτησης σχετικά με την απόστασή της από την κατάσταση στόχο. Ο αλγόριθμος BestFS παρέχει εγγύηση ότι θα βρει λύση εφόσον υπάρχει αλλά δεν εγγυάται ότι η λύση που θα εντοπίσει θα είναι η βέλτιστη. Άλφα-άστρο (A*) Η διαφορά του αλγορίθμου Α* σε σχέση με τον BestFS είναι ότι ενώ στην περίπτωση του BestFS εξετάζεται μόνο η τιμή h που επιστρέφει η ευρετική συνάρτηση ως εκτίμηση της απόστασης της τρέχουσας κατάστασης από την κατάσταση στόχο, στον Α* η τιμή h προστίθεται στην απόσταση g που έχει ήδη διανυθεί από την αρχική μέχρι την τρέχουσα κατάσταση. Άρα για κάθε κατάσταση S που προστίθεται στο μέτωπο αναζήτησης υπολογίζεται μια αριθμητική τιμή f(s) που σχηματίζεται ως άθροισμα των τιμών g(s) και h(s). g(s) = απόσταση που έχει ήδη διανυθεί για να φτάσουμε στην κατάσταση S h(s) = εκτίμηση της απόστασης της κατάστασης S από την κατάσταση στόχο f(s) = g(s) + h(s) Αν για κάθε κατάσταση S η εκτίμηση της απόστασης της S από την κατάσταση στόχο όπως επιστρέφεται από την ευρετική συνάρτηση είναι μικρότερη ή ίση από την πραγματική απόσταση της S από την κατάσταση στόχο τότε αποδεικνύεται ότι ο αλγόριθμος Α* μπορεί να εντοπίσει τη βέλτιστη λύση του προβλήματος. Σε αυτή τη περίπτωση η ευρετική συνάρτηση ονομάζεται αποδεκτή ή παραδεκτή (admissible). Ο αλγόριθμος A* εφόσον υλοποιηθεί με τη χρήση κλειστού συνόλου μπορεί να απορρίπτει τη βέλτιστη διαδρομή αν η κατάσταση η οποία οδηγεί σε αυτή σε κάποιο κόμβο δεν είναι η πρώτη που παράγεται. Για να αντιμετωπιστεί αυτό το θέμα είτε μπορεί να απορρίπτεται η πιο δαπανηρή από δύο διαδρομές που προκύπτουν καταλήγοντας στον ίδιο κόμβο είτε να εξασφαλίζεται ότι η βέλτιστη διαδρομή προς οποιοδήποτε κόμβο θα είναι η πρώτη που επιλέγεται, κάτι το οποίο συμβαίνει αν η ευρετική συνάρτηση είναι συνεπής (consistent). Μια ευρετική συνάρτηση είναι συνεπής αν για κάθε κόμβο n και για κάθε διάδοχο της n, το κόστος της ευρετικής συνάρτησης για το n είναι μικρότερο ή ίσο από κόστος της μετάβασης από το n στο n συν το κόστος της ευρετικής συνάρτησης για το n (πρόκειται για μια γενική μορφή της τριγωνικής ανισότητας). Συνεπώς ο αλγόριθμος Α* επιστρέφει τη βέλτιστη λύση σε ένα πρόβλημα αναζήτησης αν η ευρετική συνάρτηση είναι αποδεκτή και συνεπής. Πρόβλημα εύρεσης συντομότερης διαδρομής Το πρόβλημα που θα χρησιμοποιηθεί για την επίδειξη των αλγορίθμων ευρετικής αναζήτησης είναι το ίδιο πρόβλημα με αυτό που παρουσιάστηκε στην εργαστηριακή άσκηση 1 με την προσθήκη ότι στα δεδομένα υπάρχουν πλέον και οι αποστάσεις σε ευθεία γραμμή κάθε πόλης από την πόλη B (Bucharest). Οι αποστάσεις αυτές αναπαριστούν την τιμή που επιστρέφεται από την ευρετική συνάρτηση για κάθε μια από τις πόλεις και αποτελεί ένδειξη για το μήκος της συντομότερης διαδρομής που μπορεί να ακολουθηθεί από κάθε πόλη προς την πόλη προορισμό. 2

3 Εικόνα 1. Romania tour (για κάθε πόλη καταγράφεται η απόστασή της σε ευθεία γραμμή από την πόλη Bucharest) Εφαρμογή του αλγορίθμου αναρρίχησης λόφου (HC) για τη μετάβαση από Α στο Β Τρέχουσα Κατάσταση Παιδιά (Α-366) (S 253)(T 329)(Z 374) (S-253) (A 366)(F 178)(O 380)(R 193) (F-178) (B 0)(S 253) (B-0) Στόχος Διαδρομή και κόστος: A-S-F-B με μήκος διαδρομής 450 Εφαρμογή του αλγορίθμου αναζήτησης πρώτα στο καλύτερο (BestFS) για τη μετάβαση από Α στο Β Μέτωπο αναζήτησης Κλειστό σύνολο Τρέχουσα Κατάσταση Παιδιά (A 366) A S T Z (A-S 253) (A-T 329) (A-Z 374) A S A F O R (A-S-F 178) (A-S-R 193) (A-T 329) (A-S-A A, S F B S 366) (A-Z 374) (A-S-O 380) (A-S-F-B 0) (A-S-R 193) (A-S-F-S 253) (A-T A,S, F B Στόχος 329) (A-S-A 366) (A-Z 374) (A-S-O 380) Διαδρομή και κόστος: A-S-F-B με μήκος διαδρομής 450 Εφαρμογή του αλγορίθμου Α* για τη μετάβαση από Α στο Β Μέτωπο αναζήτησης Κλειστό σύνολο Τρέχουσα Κατάσταση Παιδιά (A 0+366=366) Α S T Z (A-S =393) (A-T =447) (A-Z Α S A F O R =449)] (A-S-R =413) (A-S-F =417)(A- T =447) (A-Z =449) (A-S-A =646) (A-S-O =671) A S R C P S (A-S-R-P =415) (A-S-F =417) A R S P B C R (A-T =447) (A-Z =449) (A-S-R- 3

4 C =526) (A-S-R-S =553) (A-S- A =646) (A-S-O =671) (A-S-F =417)(A-S-R-P-B 418+0=418)(A-T =447)(A-Z =449)(A-S-R-C =526)(A-S-R-S =553)(A-S-R-P-R =607)(A-S-R- P-C =615)(A-S-A =646)(A-S-O =671) (A-S-R-P-B 418+0=418) (A-T =447) (A- Z =449) (A-S-F-B 450+0=450) (A-S-R-C =526) (A-S-R-S =553) (A-S-F- S =591) (A-S-R-P-R =607) (A- S-R-P-C =615) (A-S-A =646) (A-S-O =671) Διαδρομή και κόστος: A-S-R-V-P-B με μήκος διαδρομής 418 A P R S F B S A F P R S B Κωδικοποίηση δεδομένων προβλήματος Τα δεδομένα του προβλήματος είναι όμοια με την εργαστηριακή άσκηση 1 με την επιπλέον προσθήκη ότι στο τέλος του αρχείου υπάρχει ένα τμήμα δεδομένων (το τμήμα [STRAIGHT_LINE_DISTANCE_TO:?]) που καταγράφει την απόσταση κάθε πόλης από την πόλη προορισμό. # 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 C,P,138 C,R,146 D,C,120 D,M,75 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 V,U,142 Z,A,75 Z,O,71 [STRAIGHT_LINE_DISTANCE_TO:B] A,366 B,0 C,160 D,242 E,161 F,178 G,77 H,151 I,226 L,244 M,241 N,234 O,380 P,98 R,193 S,253 T,329 U,80 V,199 Z,374 Υλοποίηση κωδικοποίησης γραφήματος σε C++ Στη συνέχεια παρουσιάζεται ο κώδικας που ορίζει τη δομή του γραφήματος και την ανάγνωση των δεδομένων του γραφήματος συμπεριλαμβανομένων των αποστάσεων για όλους τους κόμβους σε ευθεία γραμμή από τον κόμβο προορισμό. Η υλοποίηση έχει οργανωθεί στα ακόλουθα αρχεία: lab02_graph.hpp lab02_graph.cpp lab02_02.cpp #include <iostream> #include <list> 4

5 #include <sstream> #include <fstream> using namespace std; // δομή γραφήματος struct di_graph { int V; // αριθμός κορυφών γραφήματος int E; // αριθμός ακμών γραφήματος string *vertices; // συντομογραφίες ονομάτων κορυφών string *vertices_full_names; // πλήρη ονόματα κορυφών int **adjacency_matrix; // πίνακας γειτνίασης string goal_vertex{; // κορυφή στόχος int *distances_to_goal_vertex; // αποστάσεις σε ευθεία γραμμή από την κορυφή // στόχο ; // επιστροφή του ονόματος της κορυφής με δεδομένη τη θέση της κορυφής 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); // επιστροφή της απόστασης σε ευθεία γραμμή μιας κορυφής από τον προορισμό int get_heuristic(struct di_graph graph, string node); // εκτύπωση της πληροφορίας του γραφήματος void print_graph_info(struct di_graph graph); // ανάγνωση γραφήματος από αρχείο κειμένου struct di_graph read_data(string fn); // απελευθέρωση της μνήμης που καταλαμβάνει το γράφημα void free_memory(struct di_graph graph); lab02_graph.hpp #include "lab02_graph.hpp" 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; 5

6 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{; 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; int get_heuristic(struct di_graph graph, string node) { int node_index = get_vertex_index(graph, node); return graph.distances_to_goal_vertex[node_index]; 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; for (int i = 0; i < graph.v; i++) cout << "Straight line distance from " << graph.vertices[i] << " to " << graph.goal_vertex << " is " << graph.distances_to_goal_vertex[i] << endl; cout << "Destination vertex = " << graph.goal_vertex << endl; struct di_graph read_data(string fn) { 6

7 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); 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; 7

8 exit(-1); string straight_line_distance_header{; getline(filestr, straight_line_distance_header); int pos1 = straight_line_distance_header.find(":"); int pos2 = straight_line_distance_header.find("]"); int goal_vertex_name_length = pos2 - pos1-1; graph.goal_vertex = straight_line_distance_header.substr(pos1 + 1, goal_vertex_name_length); graph.distances_to_goal_vertex = new int[graph.v]{; for (int i = 0; i < graph.v; i++) { string straight_line_distance{; getline(filestr, straight_line_distance); pos2 = straight_line_distance.find(","); string from_vertex = straight_line_distance.substr(0, pos2); int from_vertex_index = get_vertex_index(graph, from_vertex); int distance = stoi(straight_line_distance.substr( pos2 + 1, straight_line_distance.length() - 1)); graph.distances_to_goal_vertex[from_vertex_index] = distance; 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; delete[] graph.distances_to_goal_vertex; lab02_graph.cpp #include "lab02_graph.hpp" 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); lab02_01.cpp 8

9 Ο κώδικας μεταγλωττίζεται με την εντολή: g++ lab02_graph.cpp lab02_01.cpp -o lab02_01 -Wall -std=c++11 Η εκτέλεση και τα αποτελέσματα της εκτέλεσης του κώδικα παρουσιάζονται στη συνέχεια:./lab02_01 data/tour_romania_h.txt Vertices=20 Vertex Arad(A) Vertex Bucharest(B) Vertex Zerind(Z) Edges=46 Arad(A) >Sibiu(S) Arad(A) >Timisoara(T) Zerind(Z)--71-->Oradea(O) Straight line distance from A to B is 366 Straight line distance from B to B is 0 Straight line distance from Z to B is 374 Υλοποίηση των αλγορίθμων HC, BestFS και A* Ο ακόλουθος κώδικας υλοποιεί τους αλγορίθμους αναρρίχησης λόφου, αναζήτησης πρώτα στο καλύτερο και Α*. Η υλοποίηση έχει οργανωθεί στα ακόλουθα αρχεία: lab02_graph.hpp lab02_graph.cpp lab02_search.hpp lab02_search.cpp lab02_02.cpp #include "lab02_graph.hpp" #include <set> #include <stack> #include <queue> struct search_node { list<string> path; int cost = 0; int heuristic = 0; // για την ταξινόμηση των κόμβων σε φθίνουσα σειρά κόστους bool operator<(search_node other) const { return cost + heuristic > other.cost + other.heuristic; ; // επιστροφή περιεχομένων ουράς προτεραιότητας ως λίστα list<search_node> priority_queue_to_list(priority_queue<search_node> frontier); // pretty print ενός search_node (bestfs) string search_node_bestfs_as_string(search_node sn); // pretty print ενός search_node (A*) string search_node_astar_as_string(search_node sn); 9

10 // διαδρομή με πλήρη ονόματα κορυφών και κόστος διαδρομής string solution_path_cost(di_graph graph, search_node sn); // διαδρομή με πλήρη ονόματα κορυφών και υπολογισμός κόστους διαδρομής string solution_path_compute_cost(di_graph graph, search_node sn); // pretty print λίστας string list_as_string(list<string> alist); // pretty print συνόλου string set_as_string(set<string> aset); void print_status_astar(set<string> closed, list<search_node> frontier, string current_state, list<string> successors); void print_status_bestfs(set<string> closed, list<search_node> frontier, string current_state, list<string> successors); void print_status_hc(di_graph graph, string current_state, list<string> successors); // χρησιμοποιείται μόνο για τον κόμβο αφετηρία (start_node) // έτσι ώστε να αρχικοποιήσει τη διαδρομή search_node to_search_node(string node, int heuristic = 0); // προσθήκη ενός επιπλέον κόμβου στη διαδρομή και ενημέρωση κόστους διαδρομής search_node to_search_node(di_graph graph, search_node parent_sn, string node, int heuristic = 0); // προσθήκη ενός επιπλέον κόμβου στη διαδρομή search_node to_bestfs_search_node(di_graph graph, search_node parent_sn, string node); // αναρρίχηση λόφου void hill_climbing(struct di_graph graph, string start_vertex, string goal_vertex); // αναζήτηση πρώτα στο καλύτερο void best_first_search(struct di_graph graph, string start_vertex, string goal_vertex); // A* (Άλφα Άστρο) void alpha_star_search(struct di_graph graph, string start_vertex, string goal_vertex); lab02_search.hpp #include "lab02_search.hpp" list<search_node> priority_queue_to_list(priority_queue<search_node> frontier) { list<search_node> alist{; while (!frontier.empty()) { 10

11 alist.push_back(frontier.top()); frontier.pop(); return alist; string search_node_bestfs_as_string(search_node sn) { string s{; s.append("("); for (string v : sn.path) { s.append(v); s.append("-"); if (s.length() > 1) s.pop_back(); s.append(" "); s.append(to_string(sn.heuristic)); s.append(")"); return s; string search_node_astar_as_string(search_node sn) { string s{; s.append("("); for (string v : sn.path) { s.append(v); s.append("-"); if (s.length() > 1) s.pop_back(); s.append(" "); s.append(to_string(sn.cost)); s.append("+"); s.append(to_string(sn.heuristic)); s.append("="); s.append(to_string(sn.cost + sn.heuristic)); 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("-"); if (s.length() > 1) s.pop_back(); s.append(" "); s.append(to_string(sn.cost)); s.append(")"); return s; 11

12 string solution_path_compute_cost(di_graph graph, search_node sn) { string s{; s.append("("); string pv = ""; sn.cost = 0; for (string v : sn.path) { s.append(graph.vertices_full_names[get_vertex_index(graph, v)]); s.append("-"); if (pv.compare("")!= 0) sn.cost += get_weight(graph, pv, v); pv = v; 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_astar(set<string> closed, list<search_node> frontier, string current_state, list<string> successors) { cout << "frontier:["; for (search_node sn : frontier) cout << search_node_astar_as_string(sn); 12

13 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; void print_status_bestfs(set<string> closed, list<search_node> frontier, string current_state, list<string> successors) { cout << "frontier:["; for (search_node sn : frontier) cout << search_node_bestfs_as_string(sn); 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; void print_status_hc(di_graph graph, string current_state, list<string> successors) { string s{; s.append("current node:("); s.append(current_state); s.append(" "); s.append(to_string(get_heuristic(graph, current_state))); s.append(") successors:"); for (string v : successors) { s.append("("); s.append(v); s.append(" "); s.append(to_string(get_heuristic(graph, v))); s.append(")"); cout << s << endl; search_node to_search_node(string node, int heuristic) { search_node sn{; sn.path.push_back(node); sn.cost = 0; sn.heuristic = heuristic; return sn; 13

14 search_node to_search_node(di_graph graph, search_node parent_sn, string node, int heuristic) { 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); sn.heuristic = heuristic; return sn; search_node to_bestfs_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 = 0; sn.heuristic = get_heuristic(graph, node); return sn; void hill_climbing(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "Hill Climbing" << endl; int best_cost = get_heuristic(graph, start_vertex); search_node current_state = to_search_node(start_vertex, get_heuristic(graph, start_vertex)); string current_state_back = start_vertex; bool deadlock{false; while (goal_vertex.compare(current_state_back)!= 0) { print_status_hc(graph, current_state_back, get_successors(graph, current_state_back)); deadlock = true; string best_v{; for (string v : get_successors(graph, current_state_back)) { if (get_heuristic(graph, v) < best_cost) { best_cost = get_heuristic(graph, v); best_v = v; deadlock = false; if (deadlock) break; else { current_state = to_search_node(graph, current_state, best_v); current_state_back = current_state.path.back(); if (!deadlock) { print_status_hc(graph, current_state_back, 14

15 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 best_first_search(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "BestFS" << endl; set<string> closed{; priority_queue<search_node> frontier{; // MIN HEAP frontier.push( to_search_node(start_vertex, get_heuristic(graph, 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_bestfs(closed, priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); frontier.pop(); 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_bestfs_search_node(graph, current_state, v)); closed.insert(current_state_back); if (frontier.empty()) { found = false; break; current_state = frontier.top(); current_state_back = current_state.path.back(); if (found) { print_status_bestfs(closed, priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); cout << "Path to goal node found: " << solution_path_compute_cost(graph, current_state) << endl; else cout << "Goal not found!" << endl; void alpha_star_search(struct di_graph graph, string start_vertex, string goal_vertex) { cout << "A*" << endl; set<string> closed{; priority_queue<search_node> frontier{; // MIN HEAP frontier.push( to_search_node(start_vertex, get_heuristic(graph, start_vertex))); search_node current_state = frontier.top(); 15

16 string current_state_back = current_state.path.back(); bool found{true; while (goal_vertex.compare(current_state_back)!= 0) { print_status_astar(closed, priority_queue_to_list(frontier), current_state_back, get_successors(graph, current_state_back)); frontier.pop(); 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, get_heuristic(graph, v))); closed.insert(current_state_back); if (frontier.empty()) { found = false; break; current_state = frontier.top(); current_state_back = current_state.path.back(); if (found) { print_status_astar(closed, priority_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; lab02_search.cpp #include "lab02_search.hpp" #include <stdlib.h> int main(int argc, char **argv) { struct di_graph graph { ; string fn{; string start_vertex{, search_method{; if (argc!= 4) { printf("wrong number of arguments\n"); printf("usage : %s <problem_instance> <source> <algorithm> \n", argv[0]); printf("example : %s tour_romania_h.txt A ASTAR \n", argv[0]); exit(-1); fn = argv[1]; start_vertex = argv[2]; search_method = argv[3]; graph = read_data(fn); cout << "Origin: " << start_vertex << " destination: " << graph.goal_vertex << endl; if (search_method.compare("hc") == 0) hill_climbing(graph, start_vertex, graph.goal_vertex); 16

17 else if (search_method.compare("bestfs") == 0) best_first_search(graph, start_vertex, graph.goal_vertex); else if (search_method.compare("astar") == 0) alpha_star_search(graph, start_vertex, graph.goal_vertex); else cerr << "invalid option" << endl; free_memory(graph); lab02_02.cpp Ο κώδικας μεταγλωττίζεται με την εντολή: g++ lab02_graph.cpp lab02_search.cpp lab02_02.cpp -o lab02_02 -Wall -std=c++11 Η εκτέλεση και τα αποτελέσματα της εκτέλεσης του κώδικα παρουσιάζονται στη συνέχεια:./lab02_02 data/tour_romania_h.txt A HC Origin: A destination: B Hill Climbing current node:(a 366) successors:(s 253)(T 329)(Z 374) current node:(s 253) successors:(a 366)(F 178)(O 380)(R 193) current node:(f 178) successors:(b 0)(S 253) current node:(b 0) successors:(f 178)(G 77)(P 98)(U 80) Path to goal node found: (Arad-Sibiu-Fagaras-Bucharest 450)./lab02_02 data/tour_romania_h.txt A BESTFS Origin: A destination: B BestFS frontier:[(a 366)] closed set:[] current node:a successors:[s T Z] frontier:[(a-s 253)(A-T 329)(A-Z 374)] closed set:[a] current node:s successors:[a F O R] frontier:[(a-s-f 178)(A-S-R 193)(A-T 329)(A-S-A 366)(A-Z 374)(A-S-O 380)] closed set:[a S] current node:f successors:[b S] frontier:[(a-s-f-b 0)(A-S-R 193)(A-S-F-S 253)(A-T 329)(A-S-A 366)(A-Z 374)(A-S-O 380)] closed set:[a F S] current node:b successors:[f G P U] Path to goal node found: (Arad-Sibiu-Fagaras-Bucharest 450)./lab02_02 data/tour_romania_h.txt A ASTAR Origin: A destination: B A* frontier:[(a 0+366=366)] closed set:[] current node:a successors:[s T Z] frontier:[(a-s =393)(A-T =447)(A-Z =449)] closed set:[a] current node:s successors:[a F O R] frontier:[(a-s-r =413)(A-S-F =417)(A-T =447)(A-Z =449)(A-S-A =646)(A-S-O =671)] closed set:[a S] current node:r successors:[c P S] frontier:[(a-s-r-p =415)(A-S-F =417)(A-T =447)(A-Z =449)(A-S-R-C =526)(A-S-R-S =553)(A-S-A =646)(A-S-O =671)] closed set:[a R S] current node:p successors:[b C R] frontier:[(a-s-f =417)(A-S-R-P-B 418+0=418)(A-T =447)(A-Z =449)(A-S-R-C =526)(A-S-R-S =553)(A-S-R-P-R =607)(A-S-R-P-C =615)(A-S-A =646)(A-S-O =671)] closed set:[a P R S] current node:f successors:[b S] frontier:[(a-s-r-p-b 418+0=418)(A-T =447)(A-Z =449)(A-S-F-B 450+0=450)(A-S-R-C =526)(A-S-R-S =553)(A-S-F-S =591)(A-S-R-P-R =607)(A-S-R-P-C =615)(A-S-A =646)(A-S-O =671)] closed set:[a F P R S] current node:b successors:[f G P U] Path to goal node found: (Arad-Sibiu-Rimniu Vilcea-Pitesti-Bucharest 418) 17

18 Αναφορές 1. [Amit] Amit s A* Pages 2. [Norvig03] Τεχνητή Νοημοσύνη μια σύγχρονη προσέγγιση, Β έκδοση, Stuart Russell, Peter Norvig, Εκδόσεις Κλειδάριθμος, [Βλαχαβάς06] Τεχνητή Νοημοσύνη, Γ έκδοση, Ι. Βλαχαβάς, Π. Κεφαλάς, Ν. Βασιλειάδης, Φ. Κόκορας, Η. Σακελλαρίου, Γκιούρδας Εκδοτική, Σύνδεσμοι οπτικής απεικόνισης αλγορίθμων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Για παράδειγμα η αρχική και η τελική κατάσταση αναπαριστώνται ως εξής: (ένα λίτρο)

Για παράδειγμα η αρχική και η τελική κατάσταση αναπαριστώνται ως εξής: (ένα λίτρο) 8 1 η ΕΡΓΑΣΙΑ ΣΤΟ ΜΑΘΗΜΑ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ Απάντηση 1ης άσκησης Κατάσταση (κόμβοι): Αναπαριστούμε μια κατάσταση του προβλήματος με ένα διατεταγμένο ζεύγος (X,Y) όπου X είναι τα λίτρα στο βάζο Α (χωρητικότητα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Γράφοι. Ορολογία. Ορισµός: 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 ) Ε ονοµάζεται

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

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

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

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

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1 Οικονομικό Πανεπιστήμιο Αθηνών, Τμήμα Πληροφορικής Μάθημα: Τεχνητή Νοημοσύνη, 2016 17 Διδάσκων: Ι. Ανδρουτσόπουλος Ασκήσεις μελέτης της 4 ης διάλεξης 4.1. (α) Αποδείξτε ότι αν η h είναι συνεπής, τότε h(n

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 11: Minimum Spanning Trees Αλγόριθμος Prim Αλγόριθμος Kruskal Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από

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

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

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

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

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

Αλγόριθμοι Γραφημάτων Αλγόριθμοι Γραφημάτων 1. Minimum Spanning Trees 2. Αλγόριθμος Prim 3. Αλγόριθμος Kruskal Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Minimum Spanning Tree Πρόβλημα: Για δοσμένο συνεκτικό, μη προσανατολισμένο,

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

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

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

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

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ100) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

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

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

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

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

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

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

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

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

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

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

Red-Black Δέντρα. Red-Black Δέντρα

Red-Black Δέντρα. Red-Black Δέντρα Red-Black Δέντρα v 6 3 8 4 z Red-Black Δέντρα Περίληψη Από τα (2,4) δέντρα στα red-black δέντρα Red-black δέντρο Ορισμός Ύψος Εισαγωγή αναδόμηση επαναχρωματισμός Διαγραφή αναδόμηση επαναχρωματισμός προσαρμογή

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

ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ

ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ ΤΥΦΛΗ ΑΝΑΖΗΤΗΣΗ (1) ΣΤΡΑΤΗΓΙΚΗ Ή ΑΛΓΟΡΙΘΜΟΣ ΑΝΑΖΗΤΗΣΗΣ Μια αυστηρά καθορισµένη ακολουθία ενεργειών µε σκοπό τη λύση ενός προβλήµατος. Χαρακτηριστικά οθέν πρόβληµα: P= Επιλυθέν πρόβληµα: P s

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2. Περιγραφή Προβληµάτων και Αναζήτηση Λύσης. Τεχνητή Νοηµοσύνη - Β' Έκδοση

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 10β: Αλγόριθμοι Γραφημάτων-Γραφήματα- Αναπαράσταση Γραφημάτων- Διερεύνηση Πρώτα σε Πλάτος (BFS) Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το

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

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

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

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

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

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

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους Επίλυση Προβληµάτων µε Greedy Αλγόριθµους Περίληψη Επίλυση προβληµάτων χρησιµοποιώντας Greedy Αλγόριθµους Ελάχιστα Δέντρα Επικάλυψης Αλγόριθµος του Prim Αλγόριθµος του Kruskal Πρόβληµα Ελάχιστης Απόστασης

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

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

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

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

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο 2010-2011 Πρώτη Σειρά Ασκήσεων (20% του συνολικού βαθμού στο μάθημα, Άριστα = 390 μονάδες) Ημερομηνία Ανακοίνωσης: 6/10/2010 Ημερομηνία Παράδοσης: 15/11/2010 σύμφωνα

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

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 10η σειρά ασκήσεων. Κοζάνη, 10 Ιανουαρίου 2008. Έχοντας γνωρίσει τις εντολές και μεθόδους που επιτρέπουν την ανάπτυξη δομημένου κώδικα, μπορούμε

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

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 8 Quick Sort 1 / 11 Ο αλγόριθμος QuickSort 1 Προτάθηκε από τον CAR (Tony) Hoare το 1961 2 Ο αλγόριθμος

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

Τεχνητή Νοημοσύνη. 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η έκδοση, Β. Γκιούρδας

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

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

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

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

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

Αλγόριθμοι Γραφημάτων Αλγόριθμοι Γραφημάτων. Γραφήματα. Αναπαράσταση Γραφημάτων 3. Διερεύνηση σε Πρώτα σε Πλάτος (BFS) Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Γράφημα Ορισμός: Ένα γράφημα G είναι το διατεταγμένο ζεύγος

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

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

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ 2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Τι μάθαμε μέχρι τώρα Κάθε πρόγραμμα της c++ περιέχει υποχρεωτικά μια συνάρτηση main() η οποία είναι εκείνη που εκτελείται πρώτη. Κάθε

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

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

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

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

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

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

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

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο Σχεδίαση Αλγορίθμων Άπληστοι Αλγόριθμοι http://delab.csd.auth.gr/~gounaris/courses/ad 1 Άπληστοι αλγόριθμοι Προβλήματα βελτιστοποίησης ηςλύνονται με μια σειρά επιλογών που είναι: εφικτές τοπικά βέλτιστες

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ00 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 01-15

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

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

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

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

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

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 13-1 Περιεχόμενο

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

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

Προγραμματισμός Υπολογιστών με C++ Προγραμματισμός Υπολογιστών με C++ ( 2012-13 ) 17η διάλεξη Ίων Ανδρουτσόπουλος http://www.aueb.gr/users/ion/ 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

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

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

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

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

Προγραμματισμός Αναδρομή

Προγραμματισμός Αναδρομή Προγραμματισμός Αναδρομή Προγραμματισμός Προγραμματισμός Κλήσεις Συναρτήσεων Όταν καλείται μια συνάρτηση, πρέπει Να θυμάται σε ποιο σημείο του προγράμματος θα επιστρέψει Να δεσμεύσει χώρο για την τιμή

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

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

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

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

PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ"

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ PROJECT ΣΤΟ ΜΑΘΗΜΑ "ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟΔΟΥΣ" ΜΕΡΟΣ ΔΕΥΤΕΡΟ Υπεύθυνος Καθηγητής Λυκοθανάσης Σπυρίδων Ακαδημαικό Έτος:

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

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00 Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 1 Ασκηση 1 [16.03.2016] Παράδοση : Τετάρτη 13.04.2016, 13:00 Η παρούσα άσκηση αφορά στον έλεγχο διµερότητας ενός γραφήµατος. Σκοπός της

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

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

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

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

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

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

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990, ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Τμήμα Πληροφορικής & Τηλεπικοινωνιών Μια σημείωση από τον Α. Δελή για το άρθρο: W. Pugh, Skip Lists: A Probabilistic Alternative to Balanced Trees, Comms of the ACM, 33(), June 10,

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

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

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

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

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου 2013 Θέµα 1 (α') Η απάντηση είναι λάθος. Αν χρησιµοποιήσουµε την µακροεντολή, για παράδειγµα, στην έκφραση 24/CUBE(2) η έκφραση

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ Μια ουρά αποτελεί μια δομή δεδομένων στη λογική του First-in

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 10γ: Αλγόριθμοι Γραφημάτων- Διερεύνηση Πρώτα σε Βάθος (DFS)- Τοπολογική Ταξινόμηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

Ηλεκτρονικοί Υπολογιστές

Ηλεκτρονικοί Υπολογιστές ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 9: Πίνακες στη C++ Ζαχαρούλα Ανδρεοπούλου Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

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

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

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

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

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

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

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