Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] formuletta con Xor

questa è una domanda un po strampalata, avrei dovuto mettere il tag
[MARIOH]... ::))))
oltre u nanno fa vidi su un sito internet una formuletta che conteneva uno
XOR, e che (era scritto), è piu o meno alla base dei vari algoritmi di
compressione... c'era scritto che si parte da questa formuletta, e poi
ovviamente ogni algoritmo "prosegue" in un modo diverso...
i due elementi che venivano "XOR-ati" erano (credo) due bytes successivi di
un file, quindi valori che andavano da 0 a 255...
ora, mi servirebbe questa formula, o comunque mi servirebbe sapere come è
possibile "combinare" insieme 2 bytes usando lo Xor...
qualcuno sa come è possibile? da dove devo partire?
non so se mi sono spiegato bene... spero abbiate capito.
grazie
MarioH

 qualcuno sa come è possibile? da dove devo partire?
Sull'algoritmo di compressione, passo la palla...
Sullo XOR direi che un buon inizio sarebbe:
1) scrivere XOR nella finestra immediata
2) Premere F1
ciao
ugo

Prova:
se tu hai una serie di bit (fai un byte) e applichi l'exclusive or
(XOR) bit a bit con un altro byte per due volte ritorni al byte di
partenza...
E' un buon inizio no?


ah-ah-ah-ah (risata amarognola...)
lo so a cosa serve lo Xor... chiedevo lumi sui possibili utilizzi per la
compressione...
uffa... grrr....
MarioH

 wrote in message
3bc60005...@news.tiscalinet.it...

uhm... sě questo č vero
cioe c=a xor b
a = c xor b
ma da qui a "mettere insieme" due bytes ? in pratica se faccio uno Xor
ottengo un byte, ma per risalire alla coppia che ha "prodotto" quei bit ho
bisogn di un altro elemento.
ad es., ho notato che :
a Or b = (a Xor b) Or (a And b)
ma non so a quanto possa servire...
se ho un solo byte, risultante dallo Xor di due bytes, non mi basta per
risalire ai due bytes "originari".
es.
11110000 xor 00001111
alla fine lo xor viene 255, cioe con tutti gli 8 but "riempiti"... ma non č
possibile tuttavia risalire ai bit originari, perche ci sono un sacco di
combinazioni di bit che si escludono tutti...
la vedo dura.......
MarioH

> 
M> ah-ah-ah-ah (risata amarognola...)
M> lo so a cosa serve lo Xor... chiedevo lumi sui possibili utilizzi per la
M> compressione...
Lo xor  (or esclusivo)  è una funzione  che è  vera se uno  solo degli
argomenti  è  vero  (si,  lo  so,  siete  pensati  a  considerarlo  un
operatore,  ma tra  operatore e  funzione l'unica  differenza  è l'uso
sintattico).
Uno degli usi , utilizzando na maschera di tutti 1, per invertire
i bit di una parola di bit.
a Xor &HFF = (una parola in cui gli zeri di a diventano 1 e viceversa)
Cosa   si  usi  nella   compressione/criptazione  dipende   dal  resto
dell'algoritmo.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

 ovviamente ogni algoritmo "prosegue" in un modo diverso...
Direi di no :)
Lo XOR non comprime, e' un'operazione logica che viene usata per vari scopi,
tra cui la criptazione e il calcolo della parita'.
Non esiste alcun "algoritmo semplice" di compressione, il piu' banale e' il
RLE, in cui si dice "ci sono X byte di valore Y", buono piu' o meno solo per
le bitmap...
Sicuro sicuro che non fosse un algoritmo di criptazione?
Ciaotutti,
*


Naturalmente no.
Ragiona in termini di informazione atomica: non esiste NESSUN modo di
comprimere l'informazione, nel senso che non c'e' modo di ridurre la
dimensione di un singolo bit.
Se non si puo' ridurre la dimensione di un bit, non si puo' ridurre nemmeno
quella di un byte...
Questo farebbe semrare che gli algoritmi di compressione non possano
esistere... In realta' eo proprio cosi': la compressione sfrutta le
ridondanze della stessa informazione all'interno di un gruppo di dati di
notevoli dimensioni e le codifica con sequenze inutilizzate o poco usate; in
pratica in un file di testo e' improbabile che ci sia il byte 254, percui io
posso decidere che il byte 254 codifica i tre byte " a ", percui rimpiazzo
tutte le occorrenze dell'articolo "a", comprensivo dei due spazi a lato, con
un singolo byte.
Alla fine inserisco un'intestazione (dizionario) che "spieghi" al programma
di decompressione come interpretare i dati.
Quindi io non comprimo l'informazione, la riduco soltanto ai minimi termini.
E' come se tu comunicassi con una macchina che deve darti il rapporto su un
certo numero di dispositivi, dicendoti se c'e' un problema oppure no.
Per la stragrande maggioranza del tempo, non avrai bisogno di sapere che
il dispositivo 1 funziona (1 bit)
il dispositivo 2 funziona (1 bit)
il dispositivo 3 funziona (1 bit)
il dispositivo 4 funziona (1 bit)
il dispositivo 5 funziona (1 bit)
il dispositivo 6 funziona (1 bit)
il dispositivo 7 funziona (1 bit)
il dispositivo 8 funziona (1 bit)
il dispositivo 9 funziona (1 bit)
[...]
il dispositivo n funziona (1 bit)
Ma ti bastera' sapere che
tutto funziona (1 bit)
Nell'eventualita' che qualcosa smetta di funzionare il messaggio sara' piu'
lungo:
non tutto funziona (1 bit)
non funzionano 3 dispositivi su 16 (4 bit)
i dispositivi che non funzionano sono
il numero 1 di sedici (4 bit)
il numero 5 di sedici (4 bit)
il numero 9 di sedici (4 bit)
il numero 11 di sedici (4 bit)
Questa e' la tecnica piu' semplice di compressione, ridurre i bit che pesano
poco (cioe' che normalmente hanno un valore noto) ad un unico bit che
confermi che il valore e' quello noto, per poi espandere il valore dei bit
ignoti qualora esso non corrisponda piu' a quello base.
Questa tecnica pero' presuppone una conoscenza condivisa tra sorgente e
destinazione, oppure una tecnica che comunichi il valore iniziale che poi
permane invariato (come nel RLE).
Chiaro? :)
Ciaotutti,
*


puo darsi... chissa... rimarrò col dubbio... ::))))
MarioH


uhm... un secondo... correggimi se sbaglio... questo vale per programmi in
cui è possibile "perdere" qualche dato (tipo un'immagine) e non un programma
che non puo mai essere modificato (tipo un EXE)... è così oppure non ho
capito una mazza ??
ciao
MarioH


Non hai capito una mazza :PPP
Tu stai mandando un dato intero e completo, stai dicendo "tutto e' come deve
essere".
Questa e' un'informazione integra, tecnicamente puoi usarla anche per i file
(infatti il file system di NT trasforma una sequenza di zeri grande quanto
un settore dell'HD in uno spazio vuoto, semplicemente allocando un bit che
dice: questo settore non e' assegnato su HD) , ma non e' molto efficace.
Viene invece molto utilizzata in telecomunicazioni, in particolare con un
approccio statistico che faccia pesare meno le sequenze di bit molto comuni.
Le compressioni con perdita di dati, invece, funzionano inviando
un'APPROSSIMAZIONE dell'informazione.
Per esempio, se io avessi una scala di grigi continua, da 0 a 255, una
compressione con perdita di dati invierebbe un'informazione del tipo: da qui
a qui e' 235, da qui a qui e' 215, da qui a qui e' 195... Sostanzialmente
generando dei "quadrati" tutti dello stesso colore. Alla fine un algoritmo
di anti aliasing provvederebbe a ricreare l'immagine piu' probabile
"fondendo" i "quadrati" di informazione ricevuti e generando quella che e'
la migliore approssimazione possibile dell'informazione originale.
In realta' le tecniche moderne sono piu' complesse e tengono conto di
parecchi fattori, in particolare delle particolarita' dei sensi umani
(percui le tecniche di compressione video sono diverse da quelle di
compressione audio)...
Ciaotutti,
*

 Non hai capito una mazza :PPP
che brutalone !
si dice: "[probabilmente] la seconda che hai detto".
j.mons.quelo.dellacasa


Dove le quadre significano "opzionale"? :P
Naaaa...
*.powered.by.bastard.inside


piu o meno ho capito............
MarioH