ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Σχετικά έγγραφα
ΕΠΛ132 Άσκηση 3 - Αρχές Προγραμματισμού ΙΙ Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

«Μηχανή Αναζήτησης Αρχείων» Ημερομηνία Παράδοσης: 30/04/2015, 09:00 π.μ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

Γ ε ν ι κ ό Λ ύ κ ε ι ο Ε λ ε υ θ ε ρ ο ύ π ο λ η ς. Α λ γ ό ρ ι θ μ ο ι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Συμβολοσειρές. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ 450 ΥΠΟΛΟΓΙΣΤΙΚΗ ΒΙΟΛΟΓΙΑ. Παύλος Αντωνίου

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Θέματα Προγραμματισμού Η/Υ

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

ΟΜΑΔΑ Λ. Αναστασίου Κωνσταντίνος Δεληγιάννη Ισαβέλλα Ζωγοπούλου Άννα Κουκάκης Γιώργος Σταθάκη Αρετιάννα

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

ΑΕΠΠ Ερωτήσεις θεωρίας

Επικοινωνία:

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Τάξη: Γ Λυκείου Κατεύθυνση: Τεχνολογική Μάθημα: Ανάπτυξη Εφαρμογών σε Προγ/κό Περιβάλλον Είδος Εξέτασης: Διαγώνισμα Ημερομηνία Εξέτασης:

ΕΡΓΑΣΙΑ 2. Κατασκευάζοντας Ημερολόγια. Ημερομηνία Ανάρτησης: 23/02/2018 Ημερομηνία Παράδοσης: 13/03/2018, 09:00

Σχεδίαση & Ανάλυση Αλγορίθμων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 5 Ανάπτυξη Προγράμματος Συμπίεσης/Αποσυμπίεσης Αρχείων

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

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

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

ΚΕΦΑΛΑΙΟ 2 ΑΛΓΟΡΙΘΜΟΙ ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ ΘΕΩΡΙΑ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Ερώτημα 1. Μας δίνεται μια συλλογή από k ακολοθίες, k >=2 και αναζητούμε το πρότυπο Ρ, μεγέθους n.

Βασίλειος Μαχαιράς Πολιτικός Μηχανικός Ph.D.

Κεφάλαιο 5 ο : Αλγόριθµοι Σύγκρισης Ακολουθιών Βιολογικών εδοµένων

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

Προγραμματισμός ΙI (Θ)

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

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

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΕΡΩΤΗΣΕΙΣ ΔΙΑΦΟΡΩΝ ΤΥΠΩΝ ΣΤΟ ΚΕΦΑΛΑΙΟ 2.2

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

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

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

ΘΕΜΑ Α ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΜΗΜΑ: Γ2-Γ3

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

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

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

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ

Μελέτη και Υλοποίηση Αλγορίθμων για Βιολογικές Εφαρμογές σε MapReduce Περιβάλλον

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

Οι Εξελικτικοί Αλγόριθμοι (ΕΑ) είναι καθολικοί στοχαστικοί αλγόριθμοι βελτιστοποίησης, εμπνευσμένοι από τις βασικές αρχές της φυσικής εξέλιξης.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

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

ΑΡΧΗ 1ης ΣΕΛΙΔΑΣ. Α2. Να αναφέρετε ονομαστικά: i) τα αλγοριθμικά κριτήρια ii) τους τρόπους αναπαράστασης αλγορίθμου. (μονάδες 10)

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

Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΚΑΙ ΕΠΑΛ (ΟΜΑΔΑ Β

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

Ψευδοκώδικας. November 7, 2011

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

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 1 Συμβολοσειρές, Πίνακες, Δείκτες

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

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

Εισαγωγή στην Στατιστική (ΔΕ200Α-210Α)

ΘΕΜΑ : «Από την ΜicroWorlds Pro στην Python. Μια Βιωματική Διδακτική Πρόταση.»

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

Τυπικά θέματα εξετάσεων. ΠΡΟΣΟΧΗ: Οι ερωτήσεις που παρατίθενται ΔΕΝ καλύπτουν την πλήρη ύλη του μαθήματος και παρέχονται απλά ενδεικτικά

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ 1 ΟΥ ΚΕΦΑΛΑΙΟΥ ΑΝΑΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ

Εισαγωγή στις Αρχές της επιστήμης των ΗΥ

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

Πρόβλημα 37 / σελίδα 207

ΒΙΒΛΙΑ ΒΙΒΛΙΑ

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΠΕΚ ΠΕΙΡΑΙΑ ΕΠΙΜΟΡΦΩΣΗ ΕΚΠ/ΚΩΝ ΠΕ19,20 ΗΜ/ΝΙΑ ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

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

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

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

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

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ 1. ΜΑΘΗΜΑ: ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦ.

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 232 Προγραμματιστικές Τεχνικές και Εργαλεία ΑΣΚΗΣΗ 2 Σύγκριση Ακολουθιών DNΑ με Δείκτες Διδάσκων: Δημήτρης Ζεϊναλιπούρ Υπεύθυνος Εργαστηρίου: Παύλος Αντωνίου Ημερομηνία Ανάθεσης: Τρίτη, 26 Σεπτεμβρίου 2017 Ημερομηνία Παράδοσης: Τρίτη, 10 Οκτωβρίου 2017 (14 ημέρες) Ι. Στόχος (ο κώδικας να υποβληθεί σε zip μέσω του Moodle) http://www.cs.ucy.ac.cy/courses/epl232 Στην εργασία αυτή θα ασχοληθούμε με συμβολοσειρές, συναρτήσεις, επεξεργασία αρχείων και δείκτες. Η άσκηση αποτελείται από πολλαπλά μέρη. Υλοποιήστε όλα τα μέρη στο ίδιο αρχείο C κάνοντας χρήση συναρτήσεων και τεχνικών δομημένου προγραμματισμού. Θα δώσουμε κάποια εισαγωγικά στοιχεία για τις ακολουθίες DNA και στην συνέχεια θα παρουσιάσουμε τα ζητούμενα μιας υποθετικής εφαρμογής. ΙΙ. Εισαγωγικά Στοιχεία Η ανακάλυψη του DNA και του ρόλου του ως φορέα των γενετικών πληροφοριών, η κατανόηση των νόμων που διέπουν την γενετική έκφραση και οι μέθοδοι της γενετικής μηχανικής αποτέλεσαν κάποιες από τις μεγαλύτερες επιστημονικές τομές του 20 ου αιώνα. Η δυνατότητα της αναπαράστασης του γενετικού υλικού με τη μορφή ακολουθιακών δεδομένων (DNA sequences) και η ανάγκη αποδοτικής επεξεργασίας του για την εξαγωγή στατιστικών συμπερασμάτων και την αποσαφήνιση του ρόλου που παίζει στις λειτουργίες της ζωής, εγκαινίασαν τον κλάδο της Υπολογιστικής Βιολογίας (Computational Biology). Μια ακολουθία DNA είναι μια μακρά ακολουθία μορίων από τέσσερα είδη νουκλεοτιδίων: η αδενίνη (A), η κυτοσίνη (C), η γουανίνη (G) και η θυμίνη (T). Οπότε, μια ακολουθία DNA είναι μια συμβολοσειρά που αποτελείται από συνδυασμούς τεσσάρων χαρακτήρων { A, C, G, T } που αντιπροσωπεύουν τα τέσσερα είδη νουκλεοτιδίων. Ένα μικρό απόσπασμα από ακολουθία DNA που ανήκει στο μικρόβιο της γρίπης των χοίρων (swine flu) είναι το πιο κάτω: tataagtatattatatattttataattttatatatataaagcaggtacaattttattatatagtgcagatcttttttgtga aaaaaaaataattatttttttgcgcgccggaataattattttttttgcgcggaaatatttttgcagtggcgattgattttt ttttcagttgtctgcccgtggcggaataattattttttcgccggaaagcattttgtagtttcacaagatgcagaatttggc gggccggaataattattttttcgccggaaagtattttgtgtaccgtagtttcactagatttcgcggtgcataccggtgggc gataggtattaaaataatttgtactgctgtaggcgttaaagattaaaattattattactgctgtaggcgttaaacattaaa cttattactactgctataggcgttaaacattaaaattattactactgttgtaggcgttaaacattaaaattattactactg ctgtaggcgtcaaagattaaaattattactactgctgtaggcgttaaacattaa Μια βασική λειτουργία στην επεξεργασία του DNA είναι η σύγκριση δύο ακολουθιών DNA για να καθορίσουμε την ομοιότητά τους. Ένας οργανισμός εξελίσσεται όταν το DNA μετατρέπεται από τον ξενιστή («πρόγονο») στους απογόνους. Εκεί πολλά πράγματα που μπορούν να συμβούν: Η ακολουθία DNA αντιγράφεται (copied) επακριβώς από το γονέα (host) στους απογόνους (offsprings). Αυτό (ευτυχώς) είναι η πιο τυπική κατάσταση. Για παράδειγμα η ATCG να γίνει ATCG. Στην ακολουθία DNA θα μπορούσε να μεταλλαχθεί (mutate) ένα μόριο. Δηλαδή, ένα μόριο θα μπορούσε να μεταβεί από ένα είδος νουκλεοτιδίου σε οποιοδήποτε άλλο από τα άλλα τρία είδη (συμβαίνει σπάνια). Για παράδειγμα: η ATCG να γίνει ATTG.

Στην ακολουθία DNA θα μπορούσε απορριφθεί (drop) ένα μόριο (να μειωθεί η ακολουθία κατά 1 μονάδα, κάτι που επίσης συμβαίνει σπάνια). Για παράδειγμα: από ATCG να γίνει ATG. Στην ακολουθία DNA θα μπορούσε να εισαχθεί (insert) ένα νέο μόριο (να αυξηθεί η ακολουθία κατά 1 μονάδα, κάτι που επίσης συμβαίνει σπάνια). Για παράδειγμα: από ATCG να γίνει ATCTG. Αν κοιτάξετε στο DNA δύο οργανισμών, μπορείτε να δείτε πόσο στενά συνδεδεμένα είναι από τον αριθμό των μετατροπών λάθους (μεταλλάξεις mutations, προσθήκες insertions και διαγραφές deletions) που χρειάζονται για να πάμε από το ένα στο άλλο. Δυστυχώς, δεν είναι πάντα εύκολο να πει κάποιος πώς εξελίχθηκε μια ακολουθία σε μια άλλη. Εξετάστε αυτές τις δύο σειρές: ATCG και ACTG. Πιθανόν να υπήρχε μια διαγραφή και ακολούθως μία προσθήκη; Ή ίσως η εισαγωγή έγινε πρώτα και στη συνέχεια να έγινε η διαγραφή; Ή ίσως υπήρξαν δύο μεταλλάξεις; Αυτή είναι μια πολύ μικρή σε μέγεθος ακολουθία, αλλά μπορείτε διαισθητικά να αντιληφθείτε πόσο γρήγορα αυξάνεται ο αριθμός των πιθανοτήτων εξέλιξης καθώς τα μεγέθη των ακολουθιών DNA μεγαλώνουν (π.χ., δείτε το συνοδευτικό swinefludna.txt) και η ομοιότητα τους μειώνεται. Οι ομοιότητες και οι διαφορές μεταξύ των ακολουθιών DNA των ατόμων και των πληθυσμών, και η στατιστική ανάλυση των διαφορών είναι ένα πολύ χρήσιμο εργαλείο της γενετικής πληθυσμών αλλά και της κατανόησης κληρονομικών ασθενειών. Στο δεύτερο μέρος της παρούσας άσκησης, θα μελετήσουμε την εύρεση ομοιοτήτων μεταξύ ακολουθιών DNA ποικίλου μήκους. Όταν επεξεργαζόμαστε ακολουθίες DNA, είναι σημαντικό να γνωρίζουμε τη διαφορά μεταξύ μιας Συμβολοσειράς (string), μιας Υποσυμβολοσειράς (substring) και μιας Υποακολουθίας (subsequence). Δείτε το πιο κάτω παράδειγμα (όπου διακρίνονται με διαφορετικά χρώματα οι επί μέρους έννοιες): Συμβολοσειρά: CGATAATTGAGA Υποσυμβολοσειρά (συνεχής): CGA Υποακολουθία (προκύπτει από συμβολοσειρά με διαγραφή 0 ή περισσότερων χαρακτήρων): AAGA Για αναζήτηση μιας υποσυμβολοσειράς DNA, ή αλλιώς ενός μοτίβου, σε μια άλλη μεγαλύτερη συμβολοσειρά DNA, μπορεί να χρησιμοποιηθούν διάφοροι αλγόριθμοι που θα κληθείτε να υλοποιήσετε στην εργασία αυτή. Aκολουθεί η περιγραφή της λογικής των αλγόριθμων στα κεφάλαια ΙΙΙ-V ενώ στο κεφάλαιο VI δίνεται το ζητούμενο της εργασίας. III. Μέρος Α Εύρεση Υποσυμβολοσειρών με Aπλό αλγόριθμο αναζήτησης Ο απλούστερος αλγόριθμος για αναζήτηση μιας υποσυμβολοσειράς είναι η εξαντλητική αναζήτηση (αλλιώς brute-force αναζήτηση). Με βάση αυτή τη τεχνική, το πρόβλημα επιλύεται με την εξής λογική: Έστω ότι X = [x 0, x 1,, x M-1 ] είναι το μοτίβο αναζήτησης πάνω σε μια συμβολοσειρά Y = [y 0, y 1,, y N-1 ] και Μ < Ν. Ο brute-force αλγόριθμος ψάχνει εάν υπάρχει μία ή και περισσότερες Μ-άδες χαρακτήρων ακριβώς ίδιες μέσα στην Y. Για να το επιτύχει, ξεκινάει να συγκρίνει τον πρώτο χαρακτήρα του X με τον αντίστοιχο του Y. Εάν είναι ίδιοι προχωράει με τους επόμενους χαρακτήρες του X, συγκρίνοντάς τους με τους αντίστοιχους χαρακτήρες του Y. Εάν συμπίπτουν όλοι οι Μ χαρακτήρες του Χ με το Υ, τότε το πρώτο «ταίριασμα» βρέθηκε και συνεχίζει με το ίδιο τρόπο μέχρι το τέλος του Y. Εάν όμως κάποιος από τους ενδιάμεσους χαρακτήρες του Χ δεν είναι ίδιος με τον αντίστοιχο του Y, τότε αναγκάζεται ο αλγόριθμος να αρχίσει από την αρχή την αναζήτηση με τον πρώτο χαρακτήρα του X και με τον επόμενο χαρακτήρα του Y. Στο πιο κάτω σχήμα, παρατίθεται διαγραμματικά η εξαντλητική αναζήτηση το οποίο καλείστε να μελετήσετε. Όπως θα παρατηρήσετε, η εξαντλητική αναζήτηση αναγκάζεται σε κάθε απόπειρα να συγκρίνει ξανά εκ νέου όλους τους χαρακτήρες του μοτίβου X έναντι των υφισταμένων θέσεων της συμβολοσειράς Y. Συνεπώς, ο αλγόριθμος προκαλεί αχρείαστες συγκρίσεις και υπολογισμούς, πράγμα το οποίο το καθιστά αργό στην εκτέλεση. Ο αλγόριθμος που θα παρουσιαστεί στο κεφάλαιο ΙV θα βελτιώσει τη λογική σύγκρισης, για να προσφέρει το ίδιο αποτέλεσμα με λιγότερο χρόνο εκτέλεσης, πράγμα το οποίο καθίσταται χρήσιμο για μεγάλες ακολουθίες DNA. 2 από 8

Στην έκτη απόπειρα το μοτίβο ταιριάζει με το κείμενο οπότε ο αλγόριθμος έχει βρει την θέση στην οποία αρχίζει το μοτίβο μέσα στο κείμενο. Σε αυτή την περίπτωση ο αλγόριθμος μπορεί να σταματήσει αν εκτελεί μια μοναδική αναζήτηση ή να συνεχίσει αν εκτελεί πολλαπλή αναζήτηση, ώστε να βρει αν εμφανίζεται το μοτίβο ξανά μέσα στη συμβολοσειρά. Αν συνεχίσει θα μετακινήσει και πάλι το μοτίβο κατά μια θέση δεξιά. 3 από 8

IV. Μέρος Β Εύρεση Υποσυμβολοσειρών με τον Αλγόριθμο Karp-Rabin Ο αλγόριθμος Karp-Rabin επιχειρεί να αποφύγει τις πολλαπλές συγκρίσεις χαρακτήρων χωρίζοντας την εκτέλεση του σε μια φάση προεπεξεργασίας και σε μια φάση εκτέλεσης. Στην φάση της προεπεξεργασίας, υπολογίζει μέσω μιας συνάρτησης κατακερματισμού (hash function), μια ακέραια τιμή (hash) η οποία υπολογίζεται πάνω στο μοτίβο αναζήτησης (X = [x 0, x 1,, x M-1 ]) ως ακολούθως: hash([x 0, x 1,, x M-1 ]) = (x 0 *2 M-1 + x 1 *2 M-2 αριθμός όπως η μέγιστη ακέραια τιμή. +...+ x M-1 *2 0 ) mod q, όπου q ένας μεγάλος Στην φάση της εκτέλεσης, συγκρίνει το hash([x 0, x 1,, x M-1 ]) έναντι της ακολουθίας Y = {y 0, y 1,, y N-1 } με την πιο κάτω λογική: A. Αρχικά υπολογίζεται το hash([y 0, y 1,, y M-1 ]) το οποίο και συγκρίνεται με το ήδη υπολογισμένο hash([x 0, x 1,, x M-1 ]). Εάν συμπίπτουν, τότε επιβεβαιώνεται χαρακτήρα προς χαρακτήρα ότι οι δυο συμβολοσειρές είναι πράγματι οι ίδιες (δηλ., ελέγχεται ότι x i == y i, 0 i M-1). B. Εάν από την άλλη δεν συμπίπτουν, τότε θα πρέπει να εξεταστεί το hash([x 0, x 1,, x M-1 ]) έναντι της επόμενης υποσυμβολοσειράς, η οποία θα αναφέρεται εδώ γενικά ως hash([y j+1, y j+2,, y j+m ]), με ένα αποδοτικό τρόπο. Οι Karp και Rabin πρότειναν την πιο κάτω βελτίωση στον υπολογισμό της τιμής του hash που είδαμε νωρίτερα: hash([y j+1, y j+2,, y j+m ]) = rehash(y j, hash([y j, y j+1,, y j+m-1 ]), y j+m ) rehash(a, h, b) = ((h a*2 Μ-1 ) * 2 + b) mod q. Σημειώστε ότι το hash([y j, y j+1,, y j+m-1 ]) έχει προκύψει από το βήμα Α (είναι δηλαδή το hash του προηγούμενου βήματος). Παραδείγματα Εκτέλεσης: 1. Έστω x = ing και y = string matching. Στη φάση της προεπεξεργασίας υπολογίζουμε με τους κωδικούς ASCII (i=105, n=110, g=103) την τιμή κατακερματισμού του μοτίβου, ως ακολούθως: hash(x) = ( 105*2 2 + 110*2 1 + 103*2 0 ) % q = 743 (για q = ΙΝΤ_ΜΑX) Στη φάση της εκτέλεσης, υπολογίζουμε διαδοχικά την τιμή κατακερματισμού υποσυμβολοσειρών μεγέθους 3 του y. Αρχικά, έχουμε 3 αποτυχημένες συγκρίσεις τιμών κατακερματισμού (δηλ., str =806, tri =797, rin =776) και στη συνέχεια 1 επιτυχημένη σύγκριση (δηλ., ing = 743). Στην πιο κάτω εικόνα φαίνονται αναλυτικά οι επί μέρους παραγόμενες τιμές κατακερματισμού:. 2. Έστω ότι ψάχνουμε την παρουσία του μοτίβου: x = GCAGAGAG στην συμβολοσειρά: GCATCGCAGAGAGTATACAGTACG. Τότε: hash(x)= (71*2 7 + 67*2 6 + 65*2 5 + 71*2 4 + 65*2 3 +71*2 2 + 65*2 1 + 71*2 0 ) % ΙΝΤ_ΜΑΧ = 17597 Στην επόμενη σελίδα φαίνονται οι φάσεις από τις οποίες περνά η εκτέλεση του αλγόριθμου. 4 από 8

Τώρα που οι τιμές των hash συναρτήσεων είναι ίδιες ο αλγόριθμος εκτελεί 8 (όσο το μήκος του μοτίβου) συγκρίσεις χαρακτήρων για να διαπιστώσει ότι όντως το μοτίβο ταιριάζει ακριβώς με το παράθυρο σύγκρισης (χαρακτήρες 6 έως 13) του κειμένου. Από αυτό το σημείο και έπειτα ο αλγόριθμος μπορεί να επαναλάβει την ίδια διαδικασία αν θέλει να βρει και άλλες θέσεις που μπορεί να εμφανίζεται το μοτίβο μέσα στο κείμενο. 5 από 8

V. Μέρος Γ Εύρεση Υποακολουθιών με το LCSS Η ομοιότητα μεταξύ 2 ακολουθιών Α, Β συνήθως συνδέεται με μια συνάρτηση απόστασης (distance function). Η συνάρτηση απόστασης μετρά την απόσταση μεταξύ Α και Β. Μικρή απόσταση μεταξύ 2 ακολουθιών συνεπάγεται υψηλή ομοιότητα. Στην άσκηση αυτή θα μελετήσουμε τον αλγόριθμο Μεγαλύτερης Κοινής Υποακολουθίας (LCSS). Ένας από τους πιο γνωστούς αλγόριθμους εύρεσης ομοιότητας είναι ο αλγόριθμος LCSS. Ο αλγόριθμος αυτός χρησιμοποιείται ευρύτατα στην αναζήτηση ομοιότητας κειμένου. Δεδομένων 2 ακολουθιών Α και Β, ο αλγόριθμος LCSS βρίσκει τη μέγιστη κοινή υπόακολουθία τους. Ο αναδρομικός τύπος που δίνει το μήκος της μέγιστης υπο-ακολουθίας κατά LCSS μεταξύ δύο συμβολοσειρών είναι: ì 0 ï LCSS ( A, B) = í 1+ LCSS( Tail ( A), Tail ( B)) ï îmax( LCSS( Tail ( A), B), LCSS( A, Tail ( B)) Head Tail A={ 1 1 1 2 2 3 6 8 9 6 } B={ 1 1 1 2 2 2 3 6 8 9 }, Εάν A ή B είναι κενά, Εάν Head[A]=Head[B], αλλιώς Οι γραμμές σύνδεσης παρουσιάζουν μια ενδεχόμενη (από πολλές) LCSS λύση: LCSS(A,B) = 9 και dlcss(a,b) = 1 9/10 = 0.1 Εξίσωση (1) Για την εύρεση της απόστασης κατά LCSS δύο ακολουθιών Α και Β, ( A B) d LCSS ( A, B) = 1- LCSS(A, B)/min( A, B ) 6 από 8 d LCSS,, δίνεται ο πιο κάτω τύπος: όπου min( A, B ) είναι το μήκος (σε χαρακτήρες) της μικρότερης ακολουθίας μεταξύ Α και Β. Η απόσταση αυτή είναι η ελάχιστη. Στο πιο πάνω παράδειγμα, οι 2 ακολουθίες Α και Β έχουν το ίδιο μήκος 10, οπότε min( A, B )=10. Ο αναδρομικός τύπος της Εξίσωσης 1 δίνει το μήκος της μέγιστης υπό-ακολουθίας μεταξύ 2 ακολουθιών Α και Β και η Εξίσωση 2 την απόσταση τους. Ο τρόπος αυτός δεν βρίσκει ποια είναι η μέγιστη υπό-ακολουθία για να μπορέσουμε να την εκτυπώσουμε. VΙ. Ζητούμενα Άσκησης Ζητούμενο αυτής της άσκησης είναι η κατασκευή ενός προγράμματος, patternmatching.c, στη γλώσσα προγραμματισμού C. Η σύνταξη κλήσης του προγράμματος θα είναι: $./patternmatching alg DNASequenceFile.txt patternfile.txt όπου: alg : είναι το όρισμα βάση του οποίου θα γίνει η επιλογή του αλγόριθμου αναζήτησης μοτίβου. Οι τιμές του ορίσματος μπορεί να είναι: bf για τον απλό αλγόριθμο αναζήτησης, kp για τον αλγόριθμο Karp-Rabin lcss για τον αλγόριθμο LCSS Εξίσωση (2) DNASequenceFile.txt είναι το αρχείο που περιέχει μια ακολουθία DNA patternfile.txt είναι το αρχείο που περιέχει το μοτίβο που θα αναζητηθεί στην ακολουθία DNA. Για τους αλγόριθμους απλής αναζήτησης και Karp-Rabin, το πρόγραμμα πρέπει να εμφανίζει πόσες φορές βρέθηκε το μοτίβο στην ακολουθία DNA. Για το αλγόριθμο LCSS το πρόγραμμα θα πρέπει να βρίσκει και να τυπώνει το μήκος και την απόσταση της μέγιστης κοινής υπό-ακολουθίας των 2 ακολουθιών εισόδου. Δίνονται τα αρχεία {small normal}-dna1.txt και {small normal}-dna2.txt που περιέχουν από μια ακολουθία DNA.

VII. Γενικές Οδηγίες Το πρόγραμμα σας θα πρέπει να συμβαδίζει με το πρότυπο ANSI C, να περιλαμβάνει εύστοχα και περιεκτικά σχόλια, να έχει καλή στοίχιση και το όνομα κάθε μεταβλητής, σταθεράς, ή συνάρτησης να είναι ενδεικτικό του ρόλου της. Να χρησιμοποιήσετε το λογισμικό τεκμηρίωσης doxygen έτσι ώστε να μπορούμε να μετατρέψουμε τα σχόλια του προγράμματός σας σε HTML αρχεία και να τα δούμε με ένα browser. Η συστηματική αντιμετώπιση της λύσης ενός προβλήματος περιλαμβάνει στο παρόν στάδιο τη διάσπαση του προβλήματος σε μικρότερα ανεξάρτητα προβλήματα που κατά κανόνα κωδικοποιούμε σε ξεχωριστές συναρτήσεις. Για αυτό τον λόγο σας καλούμε να κάνετε χρήση συναρτήσεων και άλλων τεχνικών δομημένου προγραμματισμού που διδαχτήκατε στο ΕΠΛ131. Επίσης, σας θυμίσουμε ότι κατά την διάρκεια της εκτέλεσης του προγράμματος σας αυτό θα πρέπει να δίνει τα κατάλληλα μηνύματα σε περίπτωση λάθους. Τέλος το πρόγραμμα σας θα πρέπει να μεταγλωττίζεται στις μηχανές του εργαστηρίου. Παρακαλώ όπως μελετηθούν ξανά οι κανόνες υποβολής εργασιών όπως αυτοί ορίζονται στο συμβόλαιο του μαθήματος. Επίσης να ακολουθήσετε τα πιο κάτω βήματα όταν υποβάλετε την άσκηση σας στο Moodle: 1. Δημιουργείστε ένα κατάλογο με το όνομά σας π.χ., PavlosAntoniou/ χωρίς να αφήνετε κενά στο όνομα του καταλόγου. 2. Βάλτε μέσα στον κατάλογο αυτό όλα τα αρχεία της εργασίας που πρέπει να υποβάλετε. 3. Συμπιέστε (zip) τον κατάλογο (και όχι τα αρχεία ξεχωριστά) χρησιμοποιώντας την εντολή zip c PavlosAntoniou.zip PavlosAntoniou/* 4. Ανεβάστε στο Moodle το συμπιεσμένο αρχείο π.χ., PavlosAntoniou.zip VIII. Κριτήρια αξιολόγησης: Θέμα 1 (Αλγόριθμος Απλής Αναζήτησης) 15 Θέμα 2 (Αλγόριθμος Karp-Rabin) 35 Θέμα 3 (Αλγόριθμος LCSS): 35 Γενική εικόνα (ευανάγνωστος κώδικας, σχολιασμός, κλπ.) 15 ΣΥΝΟΛΟ 100 IX. Παραδείγματα Εκτέλεσης $./patternmatching -bf dnasequence.txt patsequence.txt The pattern was found: 3 times $./patternmatching -kp dnasequence.txt patsequence.txt The pattern was found: 3 times $./patternmatching -lcss dnasequence.txt patsequence.txt Subsequence Length is: 3 Distance between DNA sequences: 0.00 Παρατίθενται κάποια επιπλέον παραδείγματα για το LCSS. Έστω το αρχείο εισόδου smalldna1.txt, smalldna2.txt small-dna1.txt tgtagtgaa small-dna2.txt cttaaccga $./patternmatching -lcss small-dna1.txt small-dna2.txt Subsequence Length is: 5 7 από 8

Distance between DNA sequences: 0.44 Έστω τα πιο κάτω (μεγαλύτερα) αρχεία εισόδου: normal-dna1.txt: gaagataggggcattggaatataagg normal-dna2.txt gcggcagaaaatagtggcaggtaggga $./patternmatching -lcss normal-dna1.txt normal-dna2.txt Subsequence Length is: 17 Distance between DNA sequences: 0.35 Έστω το αρχείο εισόδου swinefludna.txt και normal-dna.txt. $./patternmatching -bf swinefludna.txt normal-dna.txt The pattern was found: 53 times $./patternmatching -kp swinefludna.txt normal-dna.txt The pattern was found: 53 times $./patternmatching -lcss swinefludna.txt normal-dna.txt Subsequence length: 8 Distance between DNA sequences: 0.00 Καλή Επιτυχία! 8 από 8