Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Σε άσκηση για python έχω το εξής ερώτημα:

 

 

The number of combinations of k things out of a total of n things is equal to:

 

latex.php?latex=\displaystyle{\frac{n}{k}\times\frac{n-1}{k-1}\times\cdots\times\frac{n-k%2B2}{2}\times\frac{n-k%2B1}{1}}&bg=T&fg=000000&s=2

 

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.

 

Αυτό που θέλω να ρωτήσω δεν είναι ο κώδικας αλλά τι σημαίνουν οι τελείες

Μετά πιστεύω ότι τα καταφέρνω να λύσω την άσκηση

 

Ευχαριστώ

Δημοσ.

Δείχνει συνέχεια, όπως λέμε από 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

Δημοσ.

Δείχνει συνέχεια, όπως λέμε από 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

Επειδή τώρα μαθαίνω προγραμματισμό αν έχετε κάποια παρατήρηση, δεκτή με ευχαρίστηση.

Δημοσ.

Μια μικρή βελτίωση

>
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) έχουμε απλά επιτάχυνση του υπολογισμού;

Δημοσ.

Ναι επιτάχυνση, και πράξεις με μικρότερους αριθμούς. Δεν ξέρω τι αριθμούς χωράει η 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)

Δημοσ.

Ενημερωτικά, για να ελέγξεις αν ο κώδικας σου λειτουργεί σωστά:

>
from itertools import combinations

c = combinations(range(n), k)

Όπου <range(n)> μπορεί να είναι οποιοδήποτε iterable.

  • Like 1
Δημοσ.

Δεν έχω καταλάβει ακόμα τι είναι itertools και iterable

Με την παραπάνω εντολη μου βγάζει αυτό:

 

<itertools.combinations object at 00x00BE40C0>

 

με n=7 και k=3

Δημοσ.

Δεν έχω καταλάβει ακόμα τι είναι itertools και iterable

google is thy friend. Python + itertools και Python + iterable είναι το search που χρειάζεσαι :P

 

Με την παραπάνω εντολη μου βγάζει αυτό:

 

<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.

  • Like 1
Δημοσ.

Φίλε Δημήτρη, χρειάζεσαι λίγο παραπάνω ενασχόληση με την Python (αξίζει να επενδύσεις το χρόνο) :D Στον παραπάνω κώδικα που έδωσα το c είναι iterable (διάβασε προσεκτικά το post του pmav99), επομένως μπορείς να κάνεις:

 

>
for i in c:
   print(i)

 

και σου τυπώνει τα tuples των δυνατών combinations. Μια απλοϊκή εξήγηση είναι ότι το iterable είναι οτιδήποτε μπορείς να του κάνεις for και να έχεις πρόσβαση στα μέρη του. Πχ η list, το dictionary, τα tuples, τα sets είναι όλα iterables.

Δημοσ.

Φίλε Δημήτρη, χρειάζεσαι λίγο παραπάνω ενασχόληση με την Python (αξίζει να επενδύσεις το χρόνο) :D

Στον παραπάνω κώδικα που έδωσα το c είναι iterable (διάβασε προσεκτικά το post του pmav99), επομένως μπορείς να κάνεις:

 

>
for i in c:
print(i)

 

και σου τυπώνει τα tuples των δυνατών combinations. Μια απλοϊκή εξήγηση είναι ότι το iterable είναι οτιδήποτε μπορείς να του κάνεις for και να έχεις πρόσβαση στα μέρη του. Πχ η list, το dictionary, τα tuples, τα sets είναι όλα iterables.

Ευχαριστώ και για την απλή επεξήγηση των iterables.

 

 

Έτσι, δοκίμασα και αν ο κώδικάς μου βγάζει σωστά αποτελέσματα (με μικρά νούμερα) και φαίνεται να είναι εντάξει.

Δημοσ.
Δεν ξέρω τι αριθμούς χωράει η python.
Πρακτικά Long Integers

 

@DimitrisG

Προκειμένου να καταλάβεις ευκολότερα το προηγούμενο link που σου έδωσα (το think like a pythonista) δες αυτό το site. Κάνει βήμα βήμα visualization αυτού του πράγματος και νομίζω είναι πραγματικά πολύ βοηθητικό.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...