DIMITRISG Δημοσ. 4 Δεκεμβρίου 2012 Δημοσ. 4 Δεκεμβρίου 2012 Σε άσκηση για python έχω το εξής ερώτημα: The number of combinations of k things out of a total of n things is equal to: Write a function choose(n, k) which takes two integers n and k; we guarantee n>k>0. The function should return the value given in the formula above. Αυτό που θέλω να ρωτήσω δεν είναι ο κώδικας αλλά τι σημαίνουν οι τελείες Μετά πιστεύω ότι τα καταφέρνω να λύσω την άσκηση Ευχαριστώ
albNik Δημοσ. 4 Δεκεμβρίου 2012 Δημοσ. 4 Δεκεμβρίου 2012 Δείχνει συνέχεια, όπως λέμε από 1 έως 10 1,2...9,10 Στο θέμα σου αν n=49 και k=6 (πόσα δελτία εξάδες έχει το λόττο) choose(n, k)= 49/6 x 48/5 x 47/4 x 46/3 x 45/2 x 44/1
DIMITRISG Δημοσ. 5 Δεκεμβρίου 2012 Μέλος Δημοσ. 5 Δεκεμβρίου 2012 Δείχνει συνέχεια, όπως λέμε από 1 έως 10 1,2...9,10 Στο θέμα σου αν n=49 και k=6 (πόσα δελτία εξάδες έχει το λόττο) choose(n, k)= 49/6 x 48/5 x 47/4 x 46/3 x 45/2 x 44/1 Ευχαριστώ για την επεξήγηση.Το έλυσα με τον παρακάτω τρόπο: > def choose(n,k): S=[] b=n-k for j in range(k, 0, -1): if n == b: break a=n/j n-=1 S.append(a) S1=0 S2=S[-1] C=1 for i in S: C=C*S[s1] S1+=1 if i==S2: return C Επειδή τώρα μαθαίνω προγραμματισμό αν έχετε κάποια παρατήρηση, δεκτή με ευχαρίστηση.
albNik Δημοσ. 5 Δεκεμβρίου 2012 Δημοσ. 5 Δεκεμβρίου 2012 Μια μικρή βελτίωση > choose(n,k)=choose(n, n-k) choose(50, 40)=choose(50, 10) Αν k>n/2 προτιμούμε το n-k.
DIMITRISG Δημοσ. 5 Δεκεμβρίου 2012 Μέλος Δημοσ. 5 Δεκεμβρίου 2012 Μια μικρή βελτίωση > choose(n,k)=choose(n, n-k) choose(50, 40)=choose(50, 10) Αν k>n/2 προτιμούμε το n-k. Σύμφωνα με το παράδειγμα που αναφέρει: Suppose you have n flavours of ice cream, and want to make a sundae using exactly k of those flavours. How many different flavour combinations are possible? For example, if n=4 and k=2, there are 6 possibilities: (1) A and B, (2) A and C, (3) A and D, (4) B and C, (5) B and D, (6) C and D. (for example here the flavours are Apricot, Blueberry, Chocolate, and Date). Similarly, you could be choosing 2 people out of 4 (Al, Bob, Carol, Di) to make a committee. How many ways can the committee be built? The answer would still be 6. The next problem is about computing this number. δηλαδή αν έχουμε 4 (n) γεύσεις παγωτό, και θέλουμε να υπολογίσουμε πόσα παγωτά μπορούμε να έχουμε με 2 (k) γεύσεις, έχουμε 6 πιθανότητες. - με choose(n, n-k) (αν k>n/2) έχουμε απλά επιτάχυνση του υπολογισμού;
albNik Δημοσ. 5 Δεκεμβρίου 2012 Δημοσ. 5 Δεκεμβρίου 2012 Ναι επιτάχυνση, και πράξεις με μικρότερους αριθμούς. Δεν ξέρω τι αριθμούς χωράει η python. > choose(100, 95)=choose(100, 5) choose(100, 95)= (100*99*...*7*6)/(1*2*...*94*95) choose(100, 5)= (100*99*98*97*96)/(1*2*3*4*5)
iceblade Δημοσ. 5 Δεκεμβρίου 2012 Δημοσ. 5 Δεκεμβρίου 2012 Ενημερωτικά, για να ελέγξεις αν ο κώδικας σου λειτουργεί σωστά: > from itertools import combinations c = combinations(range(n), k) Όπου <range(n)> μπορεί να είναι οποιοδήποτε iterable. 1
DIMITRISG Δημοσ. 6 Δεκεμβρίου 2012 Μέλος Δημοσ. 6 Δεκεμβρίου 2012 Δεν έχω καταλάβει ακόμα τι είναι itertools και iterable Με την παραπάνω εντολη μου βγάζει αυτό: <itertools.combinations object at 00x00BE40C0> με n=7 και k=3
pmav99 Δημοσ. 6 Δεκεμβρίου 2012 Δημοσ. 6 Δεκεμβρίου 2012 Δεν έχω καταλάβει ακόμα τι είναι itertools και iterablegoogle is thy friend. Python + itertools και Python + iterable είναι το search που χρειάζεσαι Με την παραπάνω εντολη μου βγάζει αυτό: <itertools.combinations object at 00x00BE40C0> με n=7 και k=3 Στη συγκεκριμένη περίπτωση τα n και k δεν παίζουν ρόλο. Επίσης μάλλον δεν έγραψες >c = combinations(...) αλλά σκέτο >combinations(...) έτσι δεν είναι? Όπως θα δεις στο documentation, η συνάρτηση combinations του module itertools δημιουργεί ένα αντικείμενο iterable. Το αντικείμενο αυτό είναι τύπου "itertools.combinations" το οποίο όταν το έτρεξες, έτυχε να βρίσκεται στη θέση μνήμης 00x00BE40C0. Αν το τρέξεις ξανά θα δημιουργηθεί ένα νέο αντικείμενο το οποίο θα είναι αποθηκευμένο κάπου άλλου. Το πως χρησιμοποιείς τα iterables θα το βρεις στο documentation. Για να καταλάβεις καλύτερα τι εννοώ με τα παραπάνω, διάβασε αυτό, αν και ίσως είναι λίγο πάνω από το επίπεδο σου για την ώρα. Αν σε μπερδεύει πολύ κράτα το στα bookmarks και ξαναδιάβασε το αργότερα ή άνοιξε ένα καινούριο θέμα. Αν το καταλάβεις θα έχεις κάνει ένα πολύ σημαντικό βήμα στην εκμάθηση της Python. 1
DIMITRISG Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 ευχαριστώ για τους συνδέσμους Το έτρεξα έτσι: >>> from itertools import combinations >>> n,k=7,3 >>> c = combinations(range(n), k) >>> print©
iceblade Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Φίλε Δημήτρη, χρειάζεσαι λίγο παραπάνω ενασχόληση με την Python (αξίζει να επενδύσεις το χρόνο) Στον παραπάνω κώδικα που έδωσα το c είναι iterable (διάβασε προσεκτικά το post του pmav99), επομένως μπορείς να κάνεις: > for i in c: print(i) και σου τυπώνει τα tuples των δυνατών combinations. Μια απλοϊκή εξήγηση είναι ότι το iterable είναι οτιδήποτε μπορείς να του κάνεις for και να έχεις πρόσβαση στα μέρη του. Πχ η list, το dictionary, τα tuples, τα sets είναι όλα iterables.
DIMITRISG Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Φίλε Δημήτρη, χρειάζεσαι λίγο παραπάνω ενασχόληση με την Python (αξίζει να επενδύσεις το χρόνο) Στον παραπάνω κώδικα που έδωσα το c είναι iterable (διάβασε προσεκτικά το post του pmav99), επομένως μπορείς να κάνεις: > for i in c: print(i) και σου τυπώνει τα tuples των δυνατών combinations. Μια απλοϊκή εξήγηση είναι ότι το iterable είναι οτιδήποτε μπορείς να του κάνεις for και να έχεις πρόσβαση στα μέρη του. Πχ η list, το dictionary, τα tuples, τα sets είναι όλα iterables. Ευχαριστώ και για την απλή επεξήγηση των iterables. Έτσι, δοκίμασα και αν ο κώδικάς μου βγάζει σωστά αποτελέσματα (με μικρά νούμερα) και φαίνεται να είναι εντάξει.
pmav99 Δημοσ. 7 Δεκεμβρίου 2012 Δημοσ. 7 Δεκεμβρίου 2012 Δεν ξέρω τι αριθμούς χωράει η python.Πρακτικά Long Integers @DimitrisG Προκειμένου να καταλάβεις ευκολότερα το προηγούμενο link που σου έδωσα (το think like a pythonista) δες αυτό το site. Κάνει βήμα βήμα visualization αυτού του πράγματος και νομίζω είναι πραγματικά πολύ βοηθητικό.
DIMITRISG Δημοσ. 7 Δεκεμβρίου 2012 Μέλος Δημοσ. 7 Δεκεμβρίου 2012 Το vizualize βοηθάει πάρα πολύ στο ξεκίνημα. Το χρησιμοποιώ στο site που κάνω τα μαθήματα: http://cscircles.cemc.uwaterloo.ca/visualize/#mode=edit 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα