2 ΕΡΩΤΗΣΕΙΣ ΓΙΑ ΤΗΝ ΤΑΞΙΝΟΜΗΣΗ

Ξεκίνησε από landreou, 28 Μαΐου 2013, 01:19:01 ΜΜ

« προηγούμενο - επόμενο »

landreou

Γεια σε όλους τους φίλους του ΣτΠ.

Η ΠΡΩΤΗ ΕΡΩΤΗΣΗ (ισως χαζή) να σας κάνω για το bubble sorting

Αν έχουμε παράλληλους πίνακες (πάνω από 2) μπορούμε να ταξινομήσουμε με βάση δύο πίνακες δηλ
αυξουσα τον έναν και φθίνουσα τον άλλον ;

πχ εχουμε 3 πινακες εναν με ονοματα εναν με λεπτα συμετοχής έναν με γκολ
μπορουμε να ταξινομήσουμε ταυτόχρονα τους 3 αυξουσα ως προς λεπτά και φθίνουσα ως προς γκόλ ;

Η ΔΕΥΤΕΡΗ ΕΡΩΤΗΣΗ

Μπορούμε να κάνουμε ταξινόμηση για ένα τμήμα πίνακα (όχι απο τη αρχή μέχρι το τέλος δηλαδή)

Σας ευχαριστώ

petrosp13

Για την πρώτη ερώτηση
Ταξινομημένος μπορεί να είναι πάντα ένας και μοναδικός πίνακας και οι άλλοι παράλληλοι με αυτόν
Αυτό που μπορεί να γίνει είναι σε περίπτωση ισότητας στοιχείων του ταξινομημένου πίνακα, οι υπόλοιποι να ταξινομούνται με βάση κάποιο άλλο κριτήριο

Για την δεύτερη ερώτηση
Σαφώς και μπορεί να γίνει
Για i από αρχή+1 μέχρι τέλος
   Για j από τέλος μέχρι αρχή+1 με βήμα -1

Όπου αρχή και τέλος βάζεις ό,τι θέλεις
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

Από ότι κατάταλα ( αν κατάλαβα ) αν έχουμε το εξής :

Μια ποδοσφαιρική ομάδα διαθέτει 22 ποδοσφαιριστές για κάθε έναν από τους οποίους αποθηκεύουμε το ονοματεπώνυμό τους, τα λεπτά συμμετοχής τους και τη θέση στην οποία παίζουν ("Ε" για επίθεση, "Α" για άμυνα, "Κ" για κέντρο και "Τ" όταν ο παίκτης είναι τερματοφύλακας). Να γίνει αλγόριθμος που θα διαβάζει τα παραπάνω δεδομένα και θα εντοπίζει τους παίκτες που έχουν τα περισσότερα λεπτά συμμετοχής για κάθε θέση.

Στην παραπάνω άσκηση μπορούμε να ταξινομήσουμε
[α] τον πίνακα ΘΕΣΗ κατα αύξουσα
[β] τον πίνακα ΛΕΠΤΑ_ΣΥΜΜΕΤΟΧΗΣ κατα φθίνουσα

και να βρούμε το ζητούμενο ;

Αν είναι έτσι ο πίνακας με τ αονόματα πως θα ταξινομηθεί .
κατα αύξουσα σειρά ή κατα φθίνουσα ;

petrosp13

Δεν κατάλαβες τι έγραψα μάλλον
Ένας πίνακας είναι πάντα ταξινομημένος και οι άλλοι παράλληλοι με αυτόν
Αν 2 πίνακες είναι ταξινομημένοι, παύουν να είναι παράλληλοι

Το συγκεκριμένο πρόβλημα που θέτεις πάντως, μπορεί να λυθεί εύκολα χωρίς ταξινόμηση
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

Αρα ταξινομείται ένας πίνακας μόνο και ακολουθούν οι υπόλοιποι παράλληλοι .

Δίνω τη λύση χωρίς ταξινόμηση (απλά εγώ σκεφτηκα περίπλοκα το μυαλό μου πήγε στα δύσκολα δηλαδή) .

Αλγόριθμος Ασκηση 6

μεγ_Τ <- -10
θεση_Τ <- 0

μεγ_Κ <- -10
θεση_Κ <- 0

μεγ_Ε <- -10
θεση_Ε <- 0

μεγ_Α <- -10
θεση_Α <- 0

Για ι από 1 μέχρι 22

   Αν ΘΕΣΗ[ι] = "Τ" τοτε

      Αν ΛΕΠΤΑ[ι] > μεγ_Τ τοτε

         μεγ_Τ <- ΛΕΠΤΑ[ι]

         θεση_Τ <- ι

      Τέλος_αν
   
   Τέλος_αν

   Αν ΘΕΣΗ[ι] = "Κ" τοτε

      Αν ΛΕΠΤΑ[ι] > μεγ_Κ τοτε

         μεγ_Κ <- ΛΕΠΤΑ[ι]

         θεση_Κ <- ι

      Τέλος_αν
   
   Τέλος_αν

   Αν ΘΕΣΗ[ι] = "Ε" τοτε

      Αν ΛΕΠΤΑ[ι] > μεγ_Τ τοτε

         μεγ_Ε <- ΛΕΠΤΑ[ι]

         θεση_Ε <- ι

      Τέλος_αν
   
   Τέλος_αν

   Αν ΘΕΣΗ[ι] = "Α" τοτε

      Αν ΛΕΠΤΑ[ι] > μεγ_Α τοτε

         μεγ_Α <- ΛΕΠΤΑ[ι]

         θεση_Α <- ι

      Τέλος_αν
   
   Τέλος_αν
   

Τέλος_επανάληψης
   

Τέλος Ασκηση6

landreou

Αν εχουμε ένα πίνακα με ονόματα πχ ΟΝΟΜΑ[341] και ενα πινακα με τους μέσους όρους βαθμολογιών ΜΟ[341]
και θέλουμε τους πρώτους 87 να τους ταξινομήσουμε σε φθίνουσα σειρά ώς προς τον μέσο όρο βαθμολογίας και απο εκεί και μετα ( από
τον 88 μέχρι τέλος δηλαδή ) με βάση το όνομα σε αλφαβητική σειρά ποιο θα έιναι το τμήμα κώδικα ;

Εγω λεω

! ΤΑΞΙΝΟΜΗΣΗ ΤΩΝ ΠΡΩΤΩΝ 87 ΜΕ ΒΑΣΗ ΤΟ ΜΕΣΟ ΟΡΟ

ΓΙΑ Ι ΑΠΟ 2 ΜΕΧΡΙ 87

      ΓΙΑ Κ ΑΠΟ 87 ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1

               ΑΝ ΜΟ[Κ-1] > ΜΟ[Κ] ΤΟΤΕ

                    Τ <- ΜΟ[Κ-1]
                   ΜΟ[Κ-1] <- ΜΟ[Κ]
                   ΜΟ[Κ] <- Τ

                     Τ1 <- ΟΝΟΜΑ[Κ-1]
                     ΟΝΟΜΑ[Κ-1] <- ΟΝΟΜΑ[Κ]
                     ΟΝΟΜΑ[Κ] <- Τ1

               ΤΕΛΟΣ_ΑΝ

         ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
     
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

! ΕΜΦΑΝΙΣΗ ΤΩΝ ΠΡΩΤΩΝ 87

ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 87

           ΓΡΑΨΕ ΟΝΟΜΑ[Ι] , ΜΟ[Ι]

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

! ΤΑΞΙΝΟΜΗΣΗ ΤΩΝ ΥΠΟΛΟΙΠΩΝ ( ΑΠΟ 88 ΜΕΧΡΙ 341) ΑΛΦΑΒΗΤΙΚΑ

ΓΙΑ Ι ΑΠΟ 88 ΜΕΧΡΙ 341

         ΓΙΑ Κ ΑΠΟ 341 ΜΕΧΡΙ Ι ΜΕ_ΒΗΜΑ -1

                  ΑΝ ΟΝΟΜΑ[Κ-1] < ΟΝΟΜΑ[Κ] ΤΟΤΕ

                                  Τ2 <- ΟΝΟΜΑ[Κ-1]
                            ΟΝΟΜΑ[Κ-1] <- ΟΝΟΜΑ[Κ]
                            ΟΝΟΜΑ[Κ] <- Τ2

                 ΤΕΛΟΣ_ΑΝ

         ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

! ΕΜΦΑΝΙΣΗ ΑΠΟ 88 ΚΑΙ ΚΑΤΩ

ΓΙΑ Ι ΑΠΟ 88 ΜΕΧΡΙ 341

        ΓΡΑΨΕ ΟΝΟΜΑ[Ι]

ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΕΡΩΤΗΣΗ
Είναι σωστα τα όρια που βάζω στις ΓΙΑ ΑΠΟ ΜΕΧΡΙ (μπλε γράμματα) ;

petrosp13

Τα όρια σωστά είναι (κάνε το 88 --> 89), οι τελεστές σύγκρισης της αύξουσας και της φθίνουσας είναι ανάποδα
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

ΕΡΩΤΗΣΕΙΣ

[1] Το 88 γιατι να γίνει 89 ; Από το 88 και κάτω δε θέλουμε να είναι η ταξινόμηση αλφαβητικά .

[2] Για αύξουσα σειρά είναι το > και για φθίνουσα το < ;

petrosp13

[1] Όταν ξεκινάς να ταξινομείς από την αρχή, το i δεν ξεκινάει από 2; Με την ίδια λογική
[2] [j-1]...[j]  για φθίνουσα:< και για αύξουσα: >
Παπαδόπουλος Πέτρος
Καθηγητής Πληροφορικής

landreou

Επιστρέφω με μία ερώτηση γιατί για επανάληψη λύνω τις ίδιες ασκήσεις

[1] Όταν ξεκινάς να ταξινομείς από την αρχή, το i δεν ξεκινάει από 2; Με την ίδια λογική
         από το 87+1 δε θα ξεκινήσουμε την ταξινόμηση (αρα όχι 89 .... που έχω  μπερδευτεί δε μπορώ ακόμα να καταλάβω )         

[2] [j-1]...[j]  για φθίνουσα:< και για αύξουσα: >

     ΑΝ είναι > πάμε άυξουσα ταξινόμηση  και
                 < πάμε φθίνουσα ταξινόμηση ότι κάνω και στον κώδικα δηλαδή

Φίλε petrosp13 συγνώμη για την ερώτηση αλλα βλέποντας την άσκηση πάλι καταλήγω στο ίδιο ( λάθος ; ) συμπέρασμα

Εκ προοιμίου σε ευχαριστώ
   
       

Νίκος Αδαμόπουλος

Παράθεση από: landreou στις 04 Σεπ 2013, 12:58:01 ΜΜ
[1] Όταν ξεκινάς να ταξινομείς από την αρχή, το i δεν ξεκινάει από 2; Με την ίδια λογική
         από το 87+1 δε θα ξεκινήσουμε την ταξινόμηση (αρα όχι 89 .... που έχω  μπερδευτεί δε μπορώ ακόμα να καταλάβω )         

[2] [j-1]...[j]  για φθίνουσα:< και για αύξουσα: >

     ΑΝ είναι > πάμε άυξουσα ταξινόμηση  και
                 < πάμε φθίνουσα ταξινόμηση ότι κάνω και στον κώδικα δηλαδή

Φίλε petrosp13 συγνώμη για την ερώτηση αλλα βλέποντας την άσκηση πάλι καταλήγω στο ίδιο ( λάθος ; ) συμπέρασμα

Εκ προοιμίου σε ευχαριστώ

Στο 87 τελειώνει η 1η λίστα.
Στο 88 ξεκινάει η 2η λίστα.

Στο 88+1 θα ξεκινήσει ο μετρητής...

Βέβαια, έχω αμφιβολίες για το πώς ερμηνεύτηκε η εκφώνηση σε σχέση με τη λύση...

landreou

OK παιδια ευχαριστώ για την αμεσότητα της απάντησης . Το είδα καλύτερα και μπορώ να πώ το εμπέδωσα μια χαρά στο μυαλό μου.

Νίκος Αδαμόπουλος

Παράθεση από: landreou στις 04 Σεπ 2013, 12:58:01 ΜΜ
     ΑΝ είναι > πάμε άυξουσα ταξινόμηση  και
                 < πάμε φθίνουσα ταξινόμηση ότι κάνω και στον κώδικα δηλαδή

Στον κώδικα αυτό κάνεις, αλλά η εκφώνηση ζητάει το αντίθετο...

Παράθεση από: Νίκος Αδαμόπουλος στις 04 Σεπ 2013, 01:03:07 ΜΜ
Βέβαια, έχω αμφιβολίες για το πώς ερμηνεύτηκε η εκφώνηση σε σχέση με τη λύση...

Τι να εννοεί ο ποιητής όταν λέει "...και θέλουμε τους πρώτους 87 να τους ταξινομήσουμε ..." ;
Εννοεί αυτούς που βρίσκονται στις 87 πρώτες θέσεις του πίνακα, ή τους 87 καλύτερους από άποψη βαθμολογίας; Εσύ υλοποιείς λύση για την 1η εκδοχή, αλλά η 2η μου φαίνεται πιο ρεαλιστική!

Gnirut

#13
Δεν καταλαβαίνω τι θέλεις να κάνεις.
Ως προς ένα κλειδί μπορείς να ταξινομείς κάθε φορά.

Το μόνο παραπάνω που μπορείς να κάνεις είναι εαν υπάρχουν κατά την πρώτη ταξινόμηση ίδια στοιχεία (π.χ. ίσος αριθμός λεπτών συμμετοχής) να ταξινομείς αυτά τα στοιχεία με βάση τον αριθμό των γκολ (π.χ. ο χ παίκτης έχει 22 λεπτά συμμετοχής και ο ψ πάλι 22 λεπτά, εαν ο χ έχει 5 γκολ και ο ψ 10 θα βάλεις στην ταξινομημένη σειρα πρώτα τον ψ και μετά τον χ).