PYTHON - ΜΑΘΗΜΑ 14 - MODULES ΚΑΙ ΕΜΒΕΛΕΙΑ - Μέρος 5 από 6 - Algorithm: Ταξ/ση Φυσαλίδας (BubbleSort)

preview_player
Показать описание
ΠΕΡΙΕΧΟΜΕΝΑ ΒΙΝΤΕΟ:
4. Algorithm: Bubble Sort (Ταξινόμηση Φυσαλίδας)
===============================
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ:
1. Modules
2. Εσωτερικές Συναρτήσεις
2.1. Ορισμός Εσωτερικής Συνάρτησης
2.2. Εργοστάσια Συναρτήσεων
3. Εμβέλεια
4. Algorithm: Bubble Sort (Ταξινόμηση Φυσαλίδας)
5. Data Project: CRUD - Καθηγητές
Рекомендации по теме
Комментарии
Автор

Στην τελευταία άσκηση δεν ζητάει σε φθίνουσα σειρά να ταξινομηθούν τα στοιχεία κάθε στήλης;

georgem
Автор

Η δικια μου προσεγγιση στην ασκηση με μια επιφυλαξη στο κομματι με τις στηλες, που μαλλον κατι εχει παει λαθος!
Σε επομενο edit θα το εχω φτιαξει!

def sort_by_rows(rows=True):
def make_2d_array():
my_list = []
for i in range(5):
my_list.append([])
for j in range(5):
my_list[i].append(randrage(0, 100))
return my_list
def bubble_sort(array):
for i in range(len(array)-1):
for j in range(len(array)-1, i, -1):
if array[j] < array[j-1]:
array[j], array[j-1] = array[j-1], array[j]
return array
if rows:
for element in my_list:
bubble_sort(element)
return my_list
else:
for i in range(len(my_list)-1):
for j in range(len(my_list)-1, i, -1):
if my_list[j][i] < my_list[j-1][i-1]:
my_list[j][i], my_list[j-1][i-1] = my_list[j-1][i-1], my_list[j][i]
return my_list



sort_by_rows(rows=False)

konstantinostzaferis
Автор

Έχοντας τελειώσει αυτή την σειρά μαθημάτων και κάνοντας μια επανάληψη, μπήκα στην διαδικασία να αναζητήσω στο διαδύκτιο μια πιο σύντομη μέθοδο μετατροπής των σειρών σε στήλες σε έναν πίνακα, για την Άσκηση 6 του παρόντος βίντεο. Θα ήθελα να ρωτήσω αγαπητέ δάσκαλε, εάν είναι θεμιτό να αναζητά και να χρησιμοποιεί ένας αρχάριος στον προγραμματισμό τέτοιες μεθόδους, εγκαταλείποντας τις πιο περίπλοκες εάν και εφόσον τις έχει κατανοήσει και αυτές στον μηχανισμό τους. Βρήκα μια μέθοδο μετατροπής που γίνεται σε μια σειρά με την μέθοδο zip() (ο κώδικας είναι ο: ([list(x) for x in list(zip(*ar))] όπου ar ο αρχικός πίνακας 5x5). Στο δικό μου μυαλό, το είδα κάπως όπως όταν αναζητάμε ένα πακέτο όπως μας έχεις πει, έτοιμο δηλαδή κώδικα για να κάνουμε μια δουλειά μας. Δεν είμαι σίγουρος όμως για το κατά πόσο βοηθά αυτή η αναζήτηση έναν αρχάριο, ο οποίος βέβαια κάτι μαθαίνει και από αυτή την διαδικασία, ακόμα ακόμα και για να προσαρμόσει την προτεινόμενη συντομότερη λύση στον δικό του κώδικα, μαθαίνοντας την λειτουργικότητα μιας έτοιμης μεθόδου που κάνει κάτι πολύ συγκεκριμένο και χρήσιμο. Βέβαια ο εκπαιδευτικός σκοπός της συγκεκριμένης άσκησης είναι το bubble short, αλλά το ερώτημα είναι γενικότερο και γίνεται με αφορμή την συγκεκριμένη άσκηση.

jturbo
Автор

Δάσκαλε ήθελα να ρωτήσω το εξής:

Ο συγκεκριμένος αρχικός πίνακας του παραδείγματος εκτέλεσης, όντως "ζητάει" len(array) - 1 φορές την μετακίνηση στοιχείων βάσει της λογικής του αλγορίθμου που είναι και το μέγιστο δυνατό πλήθος. Ένας άλλος πίνακας όμως θα μπορούσε να ζητήσει λιγότερες φορές την εκτέλεση της μετακίνησης αυτής προκειμένου να φτάσει στο να ταξινομηθεί ο πίνακας. Στην προκειμένη περίπτωση δηλαδή για την "απόδειξη"/επεξήγηση του αλγορίθμου ουσιαστικά επιλέγεται μια ειδική περίπτωση που απαιτείται μέγιστος αριθμός βημάτων = len(array) - 1. 

Δεν ξέρω κατά πόσο θα μπορούσε κανείς να "στήσει" την λογική αυτή και να σκεφτεί τα όρια της επανάλυψης μελετώντας για παράδειγμα έναν πίνακα που θα χρειάζονταν λιγότερα βήματα, π.χ. ο array = [2, 3, 5, 6, 7, 8, 9, 1] που χρειάζεται μόλις ένα βήμα. Σε αυτή την περίπτωση για παράδειγμα ο κώδικας κάνει διαπέραση και έλεγχο στα στοιχεία του πίνακα άσκοπα, για όλα τις υπόλοιπες φορές πλην της πρώτης.

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

Ρωτώ για να καταλάβω τον τρόπο σκέψης για δημιουργία δικού μας αλγορίθμου, όταν αυτό χρειαστεί.

Επίσης μια μικρή σημείωση: στο δεύτερο ερώτημα της άσκησης 4 ζητείται φθίνουσα σειρά των στοιχείων της κάθε στήλης οπότε νομίζω πως η συνάρτηση sort_by_cols θέλει bubble_sort με αντεστραμένο σημείο ανισότητας.

jturbo
welcome to shbcf.ru