Math Problem Statement

Φανταστείτε πως θέλετε να διαλέξετε ομοιόμορφα ένα στοιχείο του {0, 1}100 με ακριβώς 30 μηδενικά. Πόσα τυχαία bits περίπου χρείαζεστε (μπορείτε να θεωρήσετε ότι n! ≈ (n/e)n); Πως θα συμπιέζατε με Arithmetic Coding το output μίας πηγής που θα γεννούσε strings από αυτήν την κατανομή; Δηλαδή ποιο θα ήταν το conditional probability model που θα χρησιμοποιούσατε για το i-οστό bit που θα έξεμπε η πηγή, όπου i ∈ {1, 2, . . . , 100}; Βοήθεια: Το πρώτο bit είναι 0 με πιθανότητα 30%.

Solution

Για να απαντήσουμε στην πρώτη ερώτηση, ας υπολογίσουμε πρώτα πόσα bits χρειαζόμαστε για να επιλέξουμε ομοιόμορφα ένα στοιχείο του συνόλου {0,1}100\{0,1\}^{100} με ακριβώς 30 μηδενικά.

1. Υπολογισμός των τυχαίων bits

Το πλήθος των διαφορετικών στοιχείων του {0,1}100\{0,1\}^{100} που περιέχουν ακριβώς 30 μηδενικά ισούται με τους συνδυασμούς C(100,30)C(100, 30), δηλαδή το πόσοι τρόποι υπάρχουν να επιλέξουμε 30 θέσεις στις 100 για τα μηδενικά. Ο αριθμός αυτός δίνεται από:

C(100,30)=100!30!(10030)!=100!30!70!C(100, 30) = \frac{100!}{30!(100-30)!} = \frac{100!}{30!70!}

Για να προσεγγίσουμε το C(100,30)C(100, 30), μπορούμε να χρησιμοποιήσουμε το Stirling’s approximation για το n!n!:

n!(ne)nn! \approx \left(\frac{n}{e}\right)^n

Επομένως, μπορούμε να υπολογίσουμε περίπου τον αριθμό των συνδυασμών:

C(100,30)(100e)100(30e)30(70e)70C(100, 30) \approx \frac{\left(\frac{100}{e}\right)^{100}}{\left(\frac{30}{e}\right)^{30} \left(\frac{70}{e}\right)^{70}}

Αυτός ο αριθμός C(100,30)C(100, 30) είναι περίπου το πλήθος των strings με 30 μηδενικά και 70 άσσους. Για να βρούμε πόσα τυχαία bits χρειαζόμαστε, πρέπει να υπολογίσουμε το λογάριθμο βάσης 2 αυτού του αριθμού, δηλαδή:

Bits neededlog2(C(100,30))\text{Bits needed} \approx \log_2 \left(C(100, 30)\right)

Χρησιμοποιώντας την προσέγγιση Stirling, έχουμε:

log2(C(100,30))log2(10010030307070)100log210030log23070log270\log_2 \left(C(100, 30)\right) \approx \log_2 \left(\frac{100^{100}}{30^{30} \cdot 70^{70}}\right) \approx 100 \log_2 100 - 30 \log_2 30 - 70 \log_2 70

Αυτός ο αριθμός μας δίνει το περίπου πλήθος τυχαίων bits που χρειαζόμαστε.

2. Συμπίεση με Arithmetic Coding

Για να χρησιμοποιήσουμε Arithmetic Coding, πρέπει να καθορίσουμε το conditional probability model για το κάθε bit, δεδομένου του string που έχει ήδη παραχθεί. Ας υποθέσουμε ότι το string αποτελείται από n0n_0 μηδενικά και n1n_1 άσσους μέχρι το i-οστό bit. Αρχικά, ξέρουμε ότι το πρώτο bit είναι 0 με πιθανότητα 30%, όπως αναφέρεται στη βοήθεια.

Για κάθε επόμενο bit, το conditional probability εξαρτάται από τον αριθμό των υπολοίπων μηδενικών και άσσων που απομένουν. Συγκεκριμένα, εάν μέχρι το ii-οστό bit έχουμε kk μηδενικά και l=ikl = i - k άσσους, τότε η πιθανότητα το επόμενο bit να είναι 0 είναι:

P(next bit = 0)=30k100iP(\text{next bit = 0}) = \frac{30 - k}{100 - i}

και αντίστοιχα η πιθανότητα το επόμενο bit να είναι 1 είναι:

P(next bit = 1)=70l100iP(\text{next bit = 1}) = \frac{70 - l}{100 - i}

Αυτό το conditional probability model χρησιμοποιείται για κάθε bit κατά τη διάρκεια του Arithmetic Coding, ώστε να προσαρμόζεται η κατανομή με βάση το ήδη παραχθέν κομμάτι του string.

Τελικό Μοντέλο

  • Αρχικά, η πιθανότητα για το πρώτο bit είναι 0 με πιθανότητα 30% και 1 με 70%.
  • Για το επόμενο bit, δεδομένων των bits που έχουν ήδη παραχθεί, προσαρμόζουμε την πιθανότητα να είναι 0 ή 1 με βάση τον αριθμό των μηδενικών και άσσων που απομένουν.

Θέλετε περισσότερες λεπτομέρειες ή έχετε κάποια άλλη απορία;


Σχετικές ερωτήσεις:

  1. Πώς μπορεί να εφαρμοστεί η προσέγγιση Stirling για άλλους συνδυασμούς;
  2. Τι άλλες μέθοδοι συμπίεσης μπορούν να χρησιμοποιηθούν αντί του Arithmetic Coding;
  3. Ποια είναι η διαφορά μεταξύ Arithmetic Coding και Huffman Coding;
  4. Πώς θα μπορούσαμε να βελτιστοποιήσουμε την αριθμητική προσέγγιση του Stirling για μικρά nn;
  5. Ποιος είναι ο ρόλος του conditional probability model στη συμπίεση δεδομένων;

Συμβουλή: Στο Arithmetic Coding, η ακρίβεια του conditional probability model είναι ζωτικής σημασίας για τη μέγιστη συμπίεση.

Ask a new question for Free

By Image

Drop file here or Click Here to upload

Math Problem Analysis

Mathematical Concepts

Combinatorics
Probability Theory
Stirling's Approximation
Arithmetic Coding

Formulas

C(100, 30) = 100! / (30! * 70!)
Stirling's Approximation: n! ≈ (n/e)^n
log_2(C(100, 30)) ≈ 100 log_2 100 - 30 log_2 30 - 70 log_2 70
Conditional Probability: P(next bit = 0) = (30 - k) / (100 - i)

Theorems

Stirling's Approximation
Binomial Coefficient
Arithmetic Coding

Suitable Grade Level

Advanced Undergraduate or Graduate Level