Τετάρτη 25 Μαΐου 2016

Benchmark - Μέτρηση ταχύτητας σε εύρεση στοιχείου.

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

Ήδη με την μικρή λίστα τιμών, το πρώτο πρόγραμμα έχει δεκαπλάσια ταχύτητα. Όσο αυξάνονται τα στοιχεία, το πρώτο πρόγραμμα δεν αργεί παραπάνω, ενώ το δεύτερο επειδή κάνει γραμμική αναζήτηση εξαρτάται κάθε φορά από τον αριθμό των στοιχείων και την θέση που βρίσκεται αυτό.



Κατάσταση αλφα = "Two","Three","One","Four","Five"
Προσθήκη αλφα, "George Hello"
Προσθήκη αλφα, "Hello"
Προσθήκη αλφα, "1"
Προσθήκη αλφα, "Zero", "Mark"
Ταξινόμηση αλφα
Τύπωσε $(4)
Για ι=0 έως Μήκος(αλφα)-1 {
      Τύπωσε αλφα$(ι!), ι
}
Αν Υπάρχει(αλφα,"Hello") τότε {
      Τύπωσε "Θέση στο άλφα=";έκφρ(αλφα!)
}
Αν Υπάρχει(αλφα,"Zero") τότε {
      Τύπωσε "Θέση στο άλφα=";έκφρ(αλφα!)
}
Αν Δεν Υπάρχει(αλφα,"Zero123") τότε {
      Τύπωσε "Δεν βρέθηκε Zero123"
}
Χ=0
Αναλυτής
Για μ=1 έως 1000 {
      Χ=Υπάρχει(αλφα,"Hello")
      Χ=Υπάρχει(αλφα,"Zero")
      Χ=Υπάρχει(αλφα,"Zero123")
}
Τύπωσε φόρτος



Συνάρτηση ΒρεςΠρώτο {
      Διάβασε &α$, β$
      Ν=0 : Ζ=0
      Επανέλαβε {
            Χ=0 : Ν++
            Εύρεση α$,β$, Ν
            Διαβασε Ν
            Αν Ν=0 τότε έξοδος
            Διάβασε Χ, Ζ
      }  Μέχρι Ζ=1
      =Χ
}
Έγγραφο αλφα$ = {Two
Three
One
Four
Five
}
αλφα$={George Hello
}
αλφα$={Hello
}
αλφα$={1
}
αλφα$={Zero
Mark}
Ταξινόμηση αλφα$
\\ Αναφορά αλφα$
Τύπωσε $(4)
Για ι=1 έως εγγράφου.παρ(αλφα$)
Τύπωσε Παράγραφος$(αλφα$, ι), ι-1
Επόμενο ι
Χ=ΒρεςΠρώτο(&αλφα$,"Hello")
Αν Χ>0 τότε Τύπωσε "Θέση στο αλφα$="; Χ-1
Χ=ΒρεςΠρώτο(&αλφα$,"Zero")
Αν Χ>0 τότε Τύπωσε "Θέση στο αλφα$="; Χ-1
Χ=ΒρεςΠρώτο(&αλφα$,"Zero123")
Αν Χ=0 Τότε Τύπωσε "Δεν βρέθηκε Zero123"


Αναλυτής
Για μ=1 έως 1000 {
      Χ=ΒρεςΠρώτο(&αλφα$,"Hello")
      Χ=ΒρεςΠρώτο(&αλφα$,"Zero")
      Χ=ΒρεςΠρώτο(&αλφα$,"Zero123")
}
Τύπωσε φόρτος


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.