CA3060809A1 - Compression adn - Google Patents
Compression adnInfo
- Publication number
- CA3060809A1 CA3060809A1 CA3060809A CA3060809A CA3060809A1 CA 3060809 A1 CA3060809 A1 CA 3060809A1 CA 3060809 A CA3060809 A CA 3060809A CA 3060809 A CA3060809 A CA 3060809A CA 3060809 A1 CA3060809 A1 CA 3060809A1
- Authority
- CA
- Canada
- Prior art keywords
- data
- compression
- iindexseg
- dna
- dim
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
- 238000007906 compression Methods 0.000 title claims description 54
- 230000006835 compression Effects 0.000 title claims description 51
- 238000000034 method Methods 0.000 claims abstract description 15
- 230000006837 decompression Effects 0.000 claims description 5
- 230000008901 benefit Effects 0.000 claims description 4
- 230000009466 transformation Effects 0.000 claims description 4
- 238000011038 discontinuous diafiltration by volume reduction Methods 0.000 claims 1
- 238000009434 installation Methods 0.000 claims 1
- 230000008569 process Effects 0.000 abstract description 7
- 238000012545 processing Methods 0.000 abstract description 7
- 108020004414 DNA Proteins 0.000 description 34
- 241001475178 Dira Species 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000013144 data compression Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- LXMSZDCAJNLERA-ZHYRCANASA-N spironolactone Chemical compound C([C@@H]1[C@]2(C)CC[C@@H]3[C@@]4(C)CCC(=O)C=C4C[C@H]([C@@H]13)SC(=O)C)C[C@@]21CCC(=O)O1 LXMSZDCAJNLERA-ZHYRCANASA-N 0.000 description 3
- OPTASPLRGRRNAP-UHFFFAOYSA-N cytosine Chemical compound NC=1C=CNC(=O)N=1 OPTASPLRGRRNAP-UHFFFAOYSA-N 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- UYTPUPDQBNUYGX-UHFFFAOYSA-N guanine Chemical compound O=C1NC(N)=NC2=C1N=CN2 UYTPUPDQBNUYGX-UHFFFAOYSA-N 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- RWQNBRDOKXIBIV-UHFFFAOYSA-N thymine Chemical compound CC1=CNC(=O)NC1=O RWQNBRDOKXIBIV-UHFFFAOYSA-N 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- ASJSAQIRZKANQN-CRCLSJGQSA-N 2-deoxy-D-ribose Chemical compound OC[C@@H](O)[C@@H](O)CC=O ASJSAQIRZKANQN-CRCLSJGQSA-N 0.000 description 1
- GFFGJBXGBJISGV-UHFFFAOYSA-N Adenine Chemical compound NC1=NC=NC2=C1N=CN2 GFFGJBXGBJISGV-UHFFFAOYSA-N 0.000 description 1
- 229930024421 Adenine Natural products 0.000 description 1
- 101100258233 Caenorhabditis elegans sun-1 gene Proteins 0.000 description 1
- 101100315388 Danio rerio tshz1 gene Proteins 0.000 description 1
- 229910019142 PO4 Inorganic materials 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 229960000643 adenine Drugs 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 235000014510 cooky Nutrition 0.000 description 1
- 229940104302 cytosine Drugs 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 229920002521 macromolecule Polymers 0.000 description 1
- 239000012528 membrane Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- NBIIXXVUZAFLBC-UHFFFAOYSA-K phosphate Chemical compound [O-]P([O-])([O-])=O NBIIXXVUZAFLBC-UHFFFAOYSA-K 0.000 description 1
- 239000010452 phosphate Substances 0.000 description 1
- 230000001012 protector Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 229940113082 thymine Drugs 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/55—Compression Theory, e.g. compression of random number, repeated compression
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
L'invention permet d'accomplir un traitement sur du code binaire (code machine) et d'en réduire le volume à 99,9999 %. En réduisant, les volumes de données pour donner résuitat d'un fichier de courte taille, cela donne une multitude de nouveaux produits informatiques et électroniques. L'invention consiste à traiter les données par séquence de x binaires à chaque itération du processus, en traitant des séries, dont la première peut être préférablement de 4 binaires, puis par la suite à mesure que les séries (préférablement 4 séries) sont traitées, des binaires sont ajoutés par quantité pouvant variée de 2 à 3 préférablement. Ensuite, lors du traitement de chaque série, nous débutons avec une détermination de la valeur 0 ou 1 indiquant soit que le nombre binaire traité est 00 ou 10 qui donne 0, ou soit que le nombre binaire traité est 11 ou 01 qui donne 1. Ainsi de suite, le traitement crée le besoin d'avoir une donnée supplémentaire à chaque fois. La première série traitée correspond à la deuxième série non traitée, etc.
Description
Doc# MAT-0003-v295-FR
01 (la valeur #1 suivit par un autre # 1). Nous répétons ce processus pour toutes les données suivantes, pas seulement la donnée qui suit celle du départ.
La logique veut que la valeur cible se confirme étant de source 00 ou 10 dans le cas de 1*0. Si 11 indique 00 ou 10, la valeur cible suivante si c'est un 0, cela précise qu'il s'agit de 10 puisqu'il se termine par un 1 ou 01 ou 001, etc. formant les données 10-1 ou 10-0-1 ou 10-0-0-1. La même chose pour 1*1.
Si la valeur cible débute par 0 suivit de 10 suivit de 00, cela signifie que les données 00-11-00 ou 00-11-10 ont été lus. A la fin d'une série, nous ajoutons 2 à 3 bits pour confirmer la dernière donnée est-elle 00 ou 10 dans le cas de 1*0, et de 11 ou 01 dans le cas de 1*1.
Le premier départ se caractérise par une lecture de 4 bits. Puis nous ajouterons 2 ou 3 bits en provenance de l'index source pour créer la 2e série. Notez qu'en créant la 2e série, nous ajouterons en convertissant seulement les 2 ou 3 bits ajoutés. Donc, si nous avons les 4 bits de départ comme à la figure 4.2, c'est-à-dire 1111, converti cela s'écrit à la cible 1-01. Nous ajoutons 3 bits. Si au départ c'était 11-11, donc 2 fois #1, alors les 3 bits ajoutés à la 2e série suivent la série précédente non transformée.
Donc avec 001 ajoutés, cela est automatiquement transformé pour être enregistré à la cible (2e série), 1* 0.
Donc, nous avons 1*0 qui termine la 2e série, et le 3e bit ajouté sera utile à
la série suivante dans ce cas-ci puisque nous n'avons pas eu à l'utiliser. Par exemple, si le départ avait été
formé de 10-0-0 alors dans ce cas-ci les 3 valeurs ajoutées auraient servi à la 2e série.
A la fin, après les 3 séries transformées, une dernière transformation aura lieu, mais il n'y a que 2 bits ajoutés. Si la dernière valeur est inutile, elle ne sera pas transformée.
Nous retenons 1 bit supplémentaire avant la dernière transformation pour savoir si c'est 00 ou 10 dans le cas de 1*0. Même chose pour 1*1. Ce bit supplémentaire sera ajouté à la suite de la dernière transformation lors de l'enregistrement du résultat final dans l'index cible.
Note : lors du dernier ajout, à la 4e série, si c'est en continu, donc si l'ajout à la 3e série était 10 ou 01 ou une continuité, alors à la 4e série, nous transformons 1 seul bit ajouté, l'autre demeure comme telle.
Le bilan fait que sur 12 bits en moyenne que nous lisons, nous récrivons cela sur 9 bits en moyenne. Ce qui donne un taux de compression (ou vitesse) de 25 %, à chaque fois que nous repassons sur un bloc de 10 752 bits, nous éliminons environs 2700 bits. Et vu que la méthode est très rapide, c'est une compression plus-ultra. En libérant de l'espace, nous reremplissons le bloc avec de nouvelles données et nous poursuivons la compression.
En réalité c'est une compression d'espace recréé techniquement parlant, qui est le début d'une découverte sur l'ADN, car il est peut-être possible de lire l'ADN avec cette formule.
Variances :
- Nous pouvons exécuter plus ou moins de 4 séries, un minimum de 2 est requis cependant ;
- L'ajout de bits à la fin des séries peut varier en nombre, cependant avec seulement 2 bits ajoutés, et ce de façon constante, requiert des tableaux de constitution, un de 2048 lignes, deux de 512 lignes, un de 128 lignes et un de 32 lignes. Mais c'est moins efficace ;
- La série du début peut être plus ou moins de 4 bits. ;
- Toutes autres variances selon le code unaire peuvent être employées.
Tous droits réservés, Mathias Robert-Thomas 7 Doc# MAT-0003-v295-FR
5. Le cod.e iecompFessbn de données ire étape :
Voici le code de programmation en Visual Basic pour cette première étape de programmation :
.******************************************
,*** Déclaration des variables globales ***
.******************************************
'Utiliser pour diviser un nombre base 10 en base 2 Dim DataFragmentB2 (, ) As Byte = New Byte (255, 7) {
{0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 1, 0}, {070, 0, 0, 0, 0, 1, 1}, _ {0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 1}, {0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 1, 1, 1}, _ {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 0, 1, 0, 1, 0}, {0, 0, 0, 0, 1, 0, 1, 1}, _ {0, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 1, 1, 0, 1}, {0, 0, 0, 0, 1, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 1}, _ {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 1}, _ {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 1}, {0, 0, 0, 1, 0, 1, 1, 0}, {0, 0, 0, 1, 0, 1, 1, 1}, _ {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 1}, {0, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, _ {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 1}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 1}, _ {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 1, 1}, _ {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, _ {0, 0, 1, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 1, 1}, _ {0, 0, 1, 0, 1, 1, 0, 0}, {0, 0, 1, 0, 1, 1, 0, {0, 0, 1, 0, 1, 1, 1, 0}, {0, 0, 1, 0, 1, 1, 1, 1}, _ {0, 0, 1, 1, 0, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 1, 1, 0, 0, 1, 0}, {0, 0, 1, 1, 0, 0, 1, 1}, _ {0, 0, 1, 1, 0, 1, 0, 0}, {0, 0, 1, 1, 0, 1, 0, 1}, {0, 0, 1, 1, 0, 1, 1, 0}, {0, 0, 1, 1, 0, 1, 1, 1}, _ {0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 1}, {0, 0, 1, 1, 1, 0, 1, 0}, {0, 0, 1, 1, 1, 0, 1, 1}, _ {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 0, 1}, {0, 0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, _ {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, _ {0, 1, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 1}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 1, 0, 0, 0, 1, 1, 1}, _ {0, 1, 0, 0, 1,0, 0, 0}, {0, 1, 0, 0, 1, 0,0, 1}, {0, 1, 0,0, 1,0, 1, 0}, {0, 1, 0, 0, 1,0, 1, 1}, _ {0, 1, 0, 0, 1, 1,0, 0}, {0, 1, 0, 0, 1, 1, 0, 1}, {0, 1, 0,0, 1, 1, 1, 0}, {0, 1, 0,0, 1, 1, 1, 1}, _ {0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 0, 1, 0,0, 1, 0}, {0, 1, 0, 1, 0,0, 1, 1}, _ {0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 1}, {0, 1, 0, 1, 0, 1, 1, 0}, {0, 1, 0, 1, 0, 1, 1, 1}, _ {0, 1, 0, 1, 1, 0, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {0, 1, 0, 1, 1,0, 1, 0}, {0, 1, 0, 1, 1,0, 1, 1}, _ {0, 1, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 1}, {0, 1, 0, 1, 1, 1, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 1}, _ {0, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0, 0, 1}, {0, 1, 1, 0, 0, 0, 1, 0}, {0, 1, 1, 0, 0, 0, 1, 1}, _ {0, 1, 1, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 1}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 1), _ {0, 1, 1, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 1}, {0, 1, 1, 0, 1, 0, 1, 0}, {0, 1, 1, 0, 1, 0, 1, 1}, _ {0, 1, 1, 0, 1, 1, 0, 0}, {0, 1, 1, 0, 1, 1, 0, 1}, {0, 1, 1,0, 1, 1, 1, 0), {0, 1, 1, 0, 1, 1, 1, _ {0, 1, 1, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 1), {0, 1, 1, 1, 0, 0, 1, 0}, {0, 1, 1, 1, 0, 0, 1, 11, _ {0, 1, 1, 1,0, 1, 0, 0), {0, 1, 1, 1, 0, 1,0, 1), {0, 1, 1, 1,0, 1, 1, 0), {0, 1, 1, 1, 0, 1, 1, 1), _ {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 1, 1, 1, 0,0, 1}, {0, 1, 1, 1, 1,0, 1, 0), {0, 1, 1, 1, 1,0, 1, 1), _ {0, 1, 1, 1, 1, 1,0, 0}, {0, 1, 1, 1, 1, 1,0, 1}, {0, 1, 1, 1, 1, 1, 1, 01, {0, 1, 1, 1, 1, 1, 1, 1}, _ {1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 1), {1, 0, 0, 0, 0, 0, 1, 01, {1, 0, 0, 0, 0, 0, 1, 1), _ {1, 0,0, 0, 0, 1,0, 0}, {1, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0}, {1, 0,0, 0, 0, 1, 1, _ {1, 0,0, 0, 1, 0,0, 0}, {1, 0, 0, 0, 1, 0,0, 1}, {1, 0, 0,0, 1,0, 1, 0}, {1, 0, 0, 0, 1,0, 1, 1}, _ {1, 0,0, 0, 1, 1,0, 0}, {1, 0, 0, 0, 1, 1,0, 1), {1, 0, 0,0, 1, 1, 1, 0}, {1, 0,0, 0, 1, 1, 1, 1), _ {1, 0,0, 1,0, 0,0, 0}, {1, 0, 0, 1, 0, 0,0, 1), {1, 0, 0, 1, 0, 0, 1, 0), {1, 0,0, 1, 0,0, 1, 11, _ {1, 0, 0, 1, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 1, 0, 1), {1, 0, 0, 1, 0, 1, 1, 0}, {1, 0, 0, 1, 0, 1, 1, 1), _ {1, 0, 0, 1, 1, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 1), {1, 0, 0, 1, 1, 0, 1, 0), {1, 0, 0, 1, 1, 0, 1, 1), _ {1, 0,0, 1, 1, 1,0, 0}, {1, 0,0, 1, 1, 1,0, 1), {1, 0, 0, 1, 1, 1, 1, 0), {1, 0,0, 1, 1, 1, 1, 1}, _ {1, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 1), {1, 0, 1, 0, 0, 0, 1, 0), {1, 0, 1, 0, 0,0, 1, 1}, _ {1, 0, 1, 0, 0, 1, 0, 0}, {1, 0, 1, 0, 0, 1, 0, 1}, {1, 0, 1, 0, 0, 1, 1, 0}, {1, 0, 1, 0, 0, 1, 1, 1}, _ {1, 0, 1, 0, 1, 0,0, 0}, {1, 0, 1,0, 1, 0,0, 1}, {1, 0, 1,0, 1,0, 1, 01, {1, 0, 1, 0, 1,0, 1, 1}, _ {1, 0, 1, 0, 1, 1, 0, 0}, {1, 0, 1, 0, 1, 1, 0, 1), {1, 0, 1, 0, 1, 1, 1, 01, {1, 0, 1, 0, 1, 1, 1, 1}, _ {1, 0, 1, 1, 0, 0, 0, 0}, {1, 0, 1, 1, 0, 0, 0, 1), {1, 0, 1, 1, 0, 0, 1, 0}, {1, 0, 1, 1, 0, 0, 1, 1}, _ {1, 0, 1, 1, 0, 1, 0, 0}, {1, 0, 1, 1, 0, 1, 0, 1}, {1, 0, 1, 1, 0, 1, 1, 0}, {1, 0, 1, 1, 0, 1, 1, 1}, _ {1, 0, 1, 1, 1, 0, 0, 0), {1, 0, 1, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 1, 0}, {1, 0, 1, 1, 1, 0, 1, 1}, _ 0 Tous droits réservés, Mathias Robert-Thomas Docl* MAT-0003-v295-FR
{1, o, 1, 1, 1, 1, o, o}, {1, 0,1,1, 1, 1, o,1}, {1, o, 1, 1, 1,1,1, o}, {1, o, 1, 1,1, 1, 1, 1}, _ 11, 1, o, o, o, o, o, 01, {1,1, o, o, a, o, a, lb {1,1, o, o, 0,0, 1, o}, {1,1, o, o, 0,0, 1, 1}, _ 11, 1,0, o, o, 1, o, 01, {1,1, 0, 0,0, 1,0, {1,1, o, 0, 0,1, 1, {1,1, o, o, 1, _ {1, 1, 0, o, 1, o, o, o}, {1, 1, o, o, 1, o, o,1}, {1,1, o, o, 1, o, 1, o}, o, 1, o, _ {1, 1, 0, o, o}, {1, 1, o, o, 1, 1, o,1}, {1,1, a, o, {1, 1, o, o, 1, 1, 1, _ {1, 1, o, 1, 0, o, 0, o}, {1, 1, o, 1, o, o, o,1}, {1,1, o, 1, 0,0, 1, 0}, {1,1, o, 1, 0, 0, 1, 1}, _ {1, 1, o, 1, o, 1, o, 0}, {1,1, o, 1, 0, 1, 0, 1}, {1,1, o, 1, 0,1, 1, o}, {1, 1, o, 1, 0, 1, 1, 1}, _ {1, 1, o, 1, 1, o, o, 0}, {1,1, o, 1, 1, o, a, {1,1, o, 1, 1,0, 1, oh {1,1, o, 1, 1,0, 1, 1}, _ {1, 1, o, 1, 1, 1, o, 0}, {1,1, 0, o, {1,1, o, 1, 1, 1, 1, 0}, {1,1, o, 1, 1, 1, 1, 1}, _ {1, 1, 1, o, o, o, 0, 0}, o, o, o, o, o, o, o, ta}, o, o, o, _ {1, 1, 1, o, 0, 1, 0, 0}, {1,1,1,0,0,1,0,1}, {1,1,1,0,0,1,1,0}, {1,1,1,0,0,1, 1, 1}, _ {1, 1, 1, 0,1,0,0,0}, {1, 1, 1,0, 1,0,0, 1}, {1,1,1,0,1,0,1,0}, {1,1,1,0,1,0,1,1}, _ {1, 1, 1,0,1,1,0,0}, {1,1, 1, 0,1, 1,0, 1}, {1,1,1,0,1,1,1,0}, {1, 1,1, 0, 1, 1, 1, 1}, _ {1, 1, 1,1,0,0,0, 0}, {1,1,1,1,0,0,0,1}, {1,1,1,1,0,0,1,0}, {1,1,1,1,0,0,1,1}, _ {1, 1, 1,1, 0,1, 0, 0}, {1,1, 1,1,0,1,0, {1,1,1,1,0,1,1,0}, {1,1,1,1,0,1,1,1}, _ {1, 1, 1, 1, 1,0, 0, 0}, {1, 1,1, 1, 1,0, 0, 1}, {1,1,1,1,1,0,1,0}, {1,1,1,1,1,0,1, _ {1, 1, 1,1, 1, 1,0, 0}, {1,1,1,1,1,1,0, J}, {1,1,1,1,1,1,1,0}, {1,1,1,1,1,1,1,1 'Contient la plage de données à traiter.
Dim IndexBinaire(,) As Byte = New Byte(1, 10751) {}
'Contient les données lues du fichier.
Dim IndexDonnees() As Byte = New Byte(6463) {}
'Initialisation de Index avec des données aléatoires de nombres entre 0 et 127 Dim Index() As Byte = New Byte(511) {26, 93, 28, 20, 26, 33, 7, 66, 92, 7, 118, 84, 84, 20, 95, 60, 30, 29, 101, 58, 12, 8, 27, 38, 112, 103, 63, 75, 66, 15, 40, 114, 45, 37, 69, 116, 99, 121, 121, 1, 10, 47, 1, 32, 38, 111, 29, 24, 118, 48, 21, 13, 4, 96, 66, 112, 80, 6, 69, 24, 82, 111, 13, 56, 68, 106, 123, 100, 127, 106, 79, 29, 17, 66, 44, 86, 55, 31, 19, 41, 107, 36, 83, 102, 63, 22, 26, 19, 42, 59, 34, 104, 75, 79, 48, 39, 0, 97, 2, 71, 101, 122, 31, 114, 55, 22, 79, 44, 96, 78, 3, 76, 57, 72, 98, 1, 49, 42, 21, 102, 34, 109, 41, 95, 111, 8, 124, 85, 39, 90, 36, 28, 73, 88, 65, 104, 91, 114, 121, 52, 55, 76, 96, 21, 93, 103, 32, 92, 33, 79, 89, 56, 33, 0, 50, 76, 91, 94, 87, 86, 9, 62, 125, 118, 37, 14, 35, 44, 77, 87, 69, 2, 74, 117, 99, 68, 59, 85, 78, 74, 88, 61, 10, 67, 117, 77, 12, 42, 50, 87, 24, 81, 14, 45, 25, 15, 27, 113, 125, 82, 125, 61, 26, 22, 34, 89, 8, 36, 70, 8, 97, 18, 81, 55, 69, 64, 88, 16, 103, 9, 89, 64, 124, 64, 122, 11, 94, 126, 77, 16, 51, 72, 3, 9, 82, 98, 21, 110, 49, 63, 51, 51, 24, 109, 16, 80, 72, 83, 125, 25, 88, 5, 120, 12, 70, 19, 43, 28, 0, 108, 115, 26, 100, 92, 97, 46, 107, 43, 99, 127, 68, 5, 18, 7, 54, 11, 106, 110, 51, 113, 54, 91, 81, 40, 52, 32, 57, 109, 54, 81, 126, 116, 98, 41, 118, 102, 48, 112, 20, 84, 113, 62, 123, 115, 25, 49, 116, 27, 89, 50, 95, 90, 34, 104, 23, 6, 2, 32, 84, 57, 33, 20, 121, 115, 73, 50, 2, 38, 74, 52, 112, 10, 62, 6, 37, 65, 39, 67, 65, 56, 119, 57, 30, 45, 60, 104, 54, 109, 60, 17, 123, 46, 9, 103, 78, 75, 98, 68, 96, 49, 58, 107, 13, 47, 91, 11, 105, 105, 108, 83, 85, 110, 23, 14, .43, 18, 83, 120, 101, 4, 80, 80, 53, 100, 53, 74, 119, 39, 72, 111, 58, 76, 23, 13, 48, 35, 77, 46, 58, 38, 22, 93, 60, 127, 73, 67, 97, 105, 127, 10, 123, 78, 40, 75, 90, 23, 71, 36, 7, 14, 12, 65, 124, 47, 40, 25, 115, 56, 3, 86, 44, 71, 59, 0, 18, 43, 107, 1, 30, 4, 17, 94, 120, 61, 59, 99, 122, 42, 35, 120, 15, 93, 5, 52, 4, 110, 122, 45, 113, 31, 106, 28, 95, 35, 53, 30, 11, 119, 37, 3, 71, 61, 19, 73, 63, 70, 119, 126, 90, 102, 46, 86, 67, 126, 108, 105, 100, 47, 92, 53, 27, 108, 5, 85, 114, 82, 117, 70, 15, 64, 16, 6, 17, 41, 101, 117, 29, 116, 62, 94, 87, 31}
'*** Déclaration des variables locales ***
'Indices qui sert à se positionner dans IndexBinaire.
Dim iIndexBin() As Integer = New Integer(1) {0, 0}
'Indique la borne maximum dans IndexBinaire.
Dim iIndexBinMax() As Integer = New Integer(1) {0, 0}
Dim iIndexBinMaxCopie As Integer Dim iCourantIB As Byte - 0 Dim iSuivantIB As Byte - 1 Dim ChangerIndexBin() As Byte = New Byte(1) {1, 0}
'Indices de boucle Dim i As Integer Dim k As Byte Dim 1 As Byte Dim i2 As Integer Dim k2 As Byte Tous droits réservés, Mathias Robert-Thomas 9 Doc# MAT-0003-v295-FR
Dim k3 As Bytc Dim iMax As Integer Dim iMax2 As Integer Dim NbrDonneesAComp As Integer 'Indique le nombre de données à compresser.
Dim Donnee As Byte 'Donnée courante lue dans le fichier.
Dim iFichier As Long 'Indice de la position courante de lecture dans le fichier.
Dim iIndexDon As Integer = 0 'Position courante de lecture dans la liste de données.
Dim iIndexDonMax As Integer = 0 'Indice du maximum de données contenu dans la liste.
Dim ValeurIB1 As Byte 'Valeur de l'index binaire Dim ValeurIB2 As Byte Dim ValeurIB3 As Byte Dim ValeurIB4 As Byte Dim ValeurIB5 As Byte Dim ValeurIB6 As Byte Dim ValeurIB7 As Byte Dim ValeurIB8 As Byte 'Variables qui servent le mécanisme principal de compression Dim ValeurIB4Pos As Byte 'Valeur unifier des bit de l'index binaire : 4 possibilités Dim ValeurVal4Pos As Byte 'Valeur unifier de 2 valeurs : 4 possibilités Dim DebutBin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUnite As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim DebutBinFin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUniteFin As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim PremierChoix(,) As Byte = New Byte(3, 2) HO, 0, 0j, {1, 1, 1}, {0, 0, 1}, {1, 1, 0}}
Dim DeuxiemeChoix(õ) As Byte - New Byte(3, 1, 1) {{{1, 1}, {0, 0}}, {{1, 1}, {0, 0}}, {{1, 0}, {0, 1}}, {{1, 0}, {0, 1}}}
Dim LongueurSegment As Byte Dim IndexSegment(,) As Byte = New Byte(1, 6) {}
Dim iIndexSeg() As Byte = New Byte(1) {0, 0}
Dim iCourantIS As Byte = 0 Dim iSuivantIS As Byte - 1 Dim ListeAjoutBit(õ) As Byte = New Byte(3, 3, 3) {
{{1, 1, 0, 0}, {1, 1, 0, 1}, {1, 0, 1, 1}, {1, 0, 1, 0}1, HO, 0, 0, 11, {0, 1, 0, 1}, {0, 0, 0, 0}, {0, 1, 0, 0}1, HO, 0, 0, 0}, {0, 0, 0, 1}, {0, 1, 1, 1}, {0, 1, 1, 0}1, {{1, 0, 1, 11, {1, 1, 1, 1}, {1, 0, 1, 0}, {1, 1, 1, 0}1}
,*****************************************************
'*** Code à la suite des déclarations de variables ***
'Initialiser IndexBinaire avec des données aléatoires For 1 - 0 To 2 For i = 0 To 511 For k = 1 To 7 'Remplir IndexBinaire IndexBinaire(0, iIndexBin(0)) = DataFragmentB2(Index(i), k) iIndexBin(0) = iIndexBin(0) + 1 Next Next Next iIndexBinMax(0) iIndexBin(0) 1***********************************************
'*** Code à mettre dans la boucle principale ***
,***********************************************
'Réinitialiser iIndexBin au début iIndexBin(iCourantIB) = 0 iIndexBin(iSuivantIB) = 0 'Balayer l'index source et copier les nouvelles valeurs dans l'index cible 'Balayer par groupe de 10 bits For i = 0 To 1074 'Réinitialiser iIndexSeg au début iIndexSeg(iCourantIS) - 0 Tous droits réservés, Mathias Robert-Thomas 10 Doc# MAT-0003-v295-FR
iIndexSeg(iSuivantIS) = 0 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) Va1eurIB2 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aBlODemi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = PremierChoix(ValeurIB4Pos, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(ValeurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) If ProchainUnite = 1 Then 'Gérer la suite des termes 101 ou 100 'Gérer la suite des termes 010 ou 011 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 El se If ValeurIB1 = 0 Then ProchainUnite 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) - 1 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 Else 'Lire l'index source ValeurIB1 IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) ValeurIB2 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aB10Demi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(ValeurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) End If Tous droits réservés, Mathias Robert-Thomas 11 Doc# MAT-0003-v295-FR
'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) DebutBinFin = DebutBin ProchainUniteFin = ProchainUnite 'Ajouter 3 fois 2 binaire au segment For k2 = 0 To 2 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) ValeurIB2 IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aBlODemi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 ValeurVal4Pos TransB2aB10Demi(0, 0, DebutBinFin, ProchainUniteFin) LongueurSegment - (2 + ((k2 + 1) * 2)) - k2 'Ajouter 2 binaire à IndexSegment IndexSegment(iCourantIS, LongueurSegment - 1) - ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 0) IndexSegment(iCourantIS, LongueurSegment) = ListeAjoutBit(ValeurVal4Pos, Va1eurIB4Pos, 1) DebutBinFin ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 2) ProchainUniteFin = ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 3) iIndexSeg(iCourantIS) = 0 iIndexSeg(iSuivantIS) 0 k= 0 While (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIB2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aB10Demi(0, 0, ValeurIB1, ValeurIB2) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = PremierChoix(ValeurIB4Pos, 0) iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(Va1eurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) k = k + 2 If ProchainUnite = 1 Then 'Gérer la suite des termes 101, 1001, ou 1000 'Gérer la suite des termes 010, 0110, ou 0111 While (ProchainUnite = 1) And (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 End If Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) - 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 Else If ValeurIB1 - 0 Then ProchainUnite = 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 1 iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) + 1 End If k = k + 1 End While If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) -IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If El se If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) -IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If End If End While 'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) Next For k = 0 To 5 IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) -IndexSegment(iCourantIS, k) iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) = ProchainUniteFin iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next 'Enregistrer les bits de la fin For i = iIndexBin(iCourantIB) To 10751 IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) = IndexBinaire(iCourantIB, i) iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next 'Enregistrer l'indice maximum iIndexBinMax(iSuivantIB) = iIndexBin(iSuivantIB) 'Inverser l'indice courant et l'indice suivant iCourantIB = ChangerIndexBin(iCourantIB) iSuivantIB = ChangerIndexBin(iSuivantIB) If (iIndexDonMax - iIndexDon) < 3231 Then NbrDonneesAComp = 3232 End If 'Lire dans le fichier à compresser 'Remplir IndexDonnees jusqu'à nécessité
While (iFichier > 0) And (NbrDonneesAComp > 0) 'Lire le fichier FileGet(1, Donnee, iFichier) iFichier = iFichier - 1 For k = 0 To 7 IndexDonnees(iIndexDonMax) = DataFragmentB2(Donnee, k) Tous droits réservés, Mathias Robert-Thomas 13 Doc# MAT-0003-v295-FR
iIndexDonMax = iIndexDonMax + 1 Next NbrDonneesAComp = NbrDonneesAComp - 8 End While iMax = (10751 - iIndexBinMax(iCourantIB)) 'Vérifier s'il y a débordement du nombre de données disponibles par rapport à
la quantité
'demandée If iMax > ((iIndexDonMax - iIndexDon) - 1) Then iMax = (iIndexDonMax - iIndexDon) - 1 End If 'Transférer les données dans l'index binaire For i 0 To iMax IndexBinaire(iCourantIB, iIndexBinMax(iCourantIB)) = IndexDonnees(iIndexDon) iIndexBinMax(iCourantIB) = iIndexBinMax(iCourantIB) + 1 iIndexDon = iIndexDon + 1 Next 'Ajuster le tableau de données lu dans le fichier en déplaçant les données à
la position 'de départ du tableau.
iMax = (iIndexDonMax - iIndexDon) - 1 For i = 0 To iMax IndexDonnees(i) = IndexDonnees(iIndexDon) iIndexDon = iIndexDon + 1 Next iIndexDon = 0 iIndexDonMax = iMax + 1 Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
2e étape :
La deuxième étape consiste à afficher le code général qui accompagne le code de compression.
Voici le code de programmation en Visual Basic pour cette deuxième étape de programmation, ce code comprend toutes les parties de la fonction de compression et il est indiqué où sont les autres blocs de code des autres étapes de tout l'algorithme de compression :
'*** Déclaration des variables globales ***
,******************************************
'Nous utilisons cette structure pour sauvegarder le fichier Public Structure ZipInformation Public NbrIterations As Long Public Fin As Integer Public Index() As Byte <VBFixedString(256)> Public NomFichier As String 'Le nom du fichier à
compresser End Structure 'Les 3 tableaux qui suivent servent à composer un nombre en base 10 à partir de la base 2 Dira TransB2aBl0Demi(õ,) As Byte = New Byte(1, 1, 1, 1) {
{{{0, 1}, {2, 3}1, {{4, 5), {6, 7}11, {{{8, 91, {10, 111), {{12, 13}, {14, 15}}1}
'Les 3 tableaux qui suivent servent à composer un nombre en base 10 à partir de la base 2 Dira TransB2aBl0Demi32(õõ) As Byte - New Byte(1, 1, 1, 1, 1) {
{{{{0, 1}, {2, 3}1, {{4, 5}, {6, 7}11, {{{8, 9}, {10, 11}1, {{12, 13), {14, 15}}}}, {{{{16, 17}, {18, 19}}, {{20, 21}, {22, 23}}1, {{{24, 25}, {26, 27}), {128, 29), {30, 31})}11 Dira TransB2aBl000mplet(,) As Integer = New Integer(31, 15) {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63), {64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}, {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191}, {192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}, {256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319}, {320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 3831, {384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447), {448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511}}
Tous droits réservés, Mathias Robert-Thomas 15 Doc# MAT-0003-v295-FR
Public Sub Compresser() ,*****************************************
'*** Déclaration des variables locales ***
r*****************************************
Dim ZipInfo As ZipInformation 'Structure qui a toute les informations de 'compression.
Dim NomFichierAComp As String 'Le nom du fichier à
compresser.
Dim NomFichierACreer As String 'Le nom du fichier à créer.
Dim DossierFichierACreer As String Dim FichierACreer As System.IO.FileStream 'Utiliser pour créer le nouveau fichier ".mag".
Dim iNomDot As Integer 'Position du premier point dans le nom de fichier.
Dim iNomBackslash As Integer 'Position du premier backslash dans le nom de 'fichier.
Dim LongueurNomFichier As Integer 'Longueur du nom de fichier à compresser.
Dim BackslashTrouve As Boolean 'Indique si nom trouvons un backslash avant le point Dim DotTrouve As Boolean 'Indique si nous avons trouvé un point.
Dim NomFichierACompErreur As Boolean 'Indique si l'utilisateur utilise un mauvais 'nom de fichier.
Dim LongueurFichier As Long 'Longueur du fichier Dim NbrIterations As Long 'Enlever les espace du nom de fichier NomFichierAComp = Trim(EdFichierACompresser.Text) DossierFichierACreer = Trim(EdDossierCibleComp.Text) LongueurNomFichier = Len(NomFichierAComp) 'Initialiser les variables iNomDot = LongueurNomFichier - 1 BackslashTrouve = False DotTrouve = False = NomFichierACompErreur = False NbrIterations = 0 r****************************************************************
'*** Implementation - Vérifier le nom du fichier à compresser ***
'Lire l'extension du nom de fichier à compresser While (((iNomDot > 0) And (Not BackslashTrouve)) And (Not DotTrouve)) If NomFichierAComp.Chars(iNomDot) = "." Then DotTrouve = True Else If NomFichierAComp.Chars(iNomDot) = "\" Then 'A ce point ci, le fichier à compresser n'a pas d'extension BackslashTrouve = True iNomBackslash = iNomDot End If End If iNomDot = iNomDot - 1 End While 'Lire le restant du texte du nom de fichier à compresser If DotTrouve Then iNomBackslash = iNomDot 'Essayer de trouver le caractère backslash While ((iNomBackslash > 0) And (Not BackslashTrouve)) If NomFichierAComp.Chars(iNomBackslash) = "\" Then BackslashTrouve = True End If Tous droits réservés, Mathias Robert-Thomas =
Doc# MAT-0003-v295-FR
iNomBackslash = iNomBackslash - 1 End While If BackslashTrouve Then ZipInfo.NomFichier = NomFichierAComp.Substring(iNomBackslash + 1, _ LongueurNomFichier - (iNomBackslash + 1)) NomFichierACreer = DossierFichierACreer & "\" &
NomFichierAComp.Substring(iNomBackslash LongueurNomFichier - (LongueurNomFichier - (iNomDot + 1)) -(iNomBackslash + 1)) & ".dna"
Mise 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
compresser NomFichierACompErreur = True End If Else If BackslashTrouve Then ZipInfo.NomFichier = NomFichierAComp.Substring(iNomBackslash + 1, _ LongueurNomFichier - (iNbmBackslash + 1)) NomFichierACreer = DossierFichierACreer & "\" & _ ZipInfo.NomFichier & ".dna"
El se 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
compresser NomFichierACompErreur = True End If End If 'Vérifier si une erreur a été trouvé dans le nom de fichier et le dossier du fichier à compresser If Not NomFichierACompErreur Then ,*************************************************
'*** Implementation - Commencer la compression ***
,*************************************************
'Modifier le text du label de statut LbStatutMontre.Text = "En cours..."
LbStatutMontre.Refresh() 'Désactiver le contrôle à onglet TabControlel.Enabled = False 'Ouvrir le fichier en mode binaire FileOpen(1, Trim(EdFichierACompresser.Text), OpenMode.Binary) 'Lire la longueur du fichier LongueurFichier = LOF(1) 'Initialiser la position courante de lecture du fichier iFichier = LongueurFichier ReDim ZipInfo.Index(1343) 'Pour éviter que les fichiers à longueur nul provoque une division par 0 à la 'gestion de la barre de progression.
If LongueurFichier = 0 Then LongueurFichier = 1 End If '*** Tant qu'il y a des données à compresser balayer. ***
'*** Ceci est la boucle centrale du processus de compression. *** =
While Mot (iIndexBinMax(iCourantIB) < 10752) '*** Mettre le code de l'étape 1 ici. ***
'*** Sauf les déclarations de variables locales ***
'*** qui vont au début de la fonction. ***
,**************************************************
BarreProgressionl.Value = ((LongueurFichier - iFichier) /
Tous droits réservés, Mathias Robert-Thomas 17 Doc# MAT-0003-v295-FR
LongueurFichier) * 100 NbrIterations = NbrIterations + 1 End While 'Fin de la boucle principale 'Fermer le fichier à compresser FileClose(1) 'Sauvegarder les informations de compression dans une structure ZipInfo.NbrIterations = NbrIterations ZipInfo.Fin = iIndexBinMax(iCourantIB) i2 = 0 'Sauvegarder l'index For i = 0 To 1343 ValeurIB1 IndexBinaire(iCourantIB, i2) Va1eurIB2 = IndexBinaire(iCourantIB, i2 + 1) ValeurIB3 IndexBinaire(iCourantIB, i2 + 2) Va1eurIB4 = IndexBinaire(iCourantIB, i2 + 3) ValeurIB5 = IndexBinaire(iCourantIB, i2 + 4) ValeurIB6 = IndexBinaire(iCourantIB, i2 + 5) ValeurIB7 = IndexBinaire(iCourantIB, i2 + 6) ValeurIB8 IndexBinaire(iCourantIB, i2 + 7) i2 = i2 + 8 ZipInfo.Index(i) = TransB2aB10Complet( _ TransB2aB10Demi32(0, ValeurIB1, ValeurIB2, ValeurIB3, ValeurIB4), TransB2aB10Demi(ValeurIB5, ValeurIB6, Va1eurIB7, ValeurIB8)) Next 'Créer le fichier ".dna"
FichierACreer = System.IO.File.Create(NomFichierACreer) FichierACreer.Close() 'Ouvrir le fichier ".dna" en mode binaire FileOpen(2, NomFichierACreer, OpenMode.Binary) 'Sauvegarder la structure dans le fichier FilePut(2, ZipInfo) 'Fermer le fichier ".dna"
FileClose(2) 'Modifier le texte du label statut LbStatutMontre.Text = "Complété!"
LbStatutMontre.Refresh() 'Réactiver le contrôle à onglet TabControlel.Enabled = True BarreProgressionl.Value = 0 Else 'Modifier le texte du label statut LbStatutMontre.Text = "Erreur"
LbStatutMontre.Refresh() End If 'if Not NomFichierACompErreur End Sub Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
o 0 a 6,3 Le co d e e decomprressoon de donnees _=_=_=_=_=_=_=_=_ ____________ _ ,.*****************************************
'*** Déclaration des variables globales ***
.******************************************
Public Sub Decompresser() '*** Déclaration des variables locales ***
.*****************************************
Dim ZipInfo As ZipInformation 'Structure qui a toute les informations de 'compression.
Dim NomFichierADecomp As String 'Le nom du fichier à décompresser.
Dim NomFichierACreer As String 'Le nom du fichier à créer.
Dim DossierFichierACreer As String Dim FichierACreer As System.IO.FileStream 'Utiliser pour créer le nouveau fichier ".mag".
Dim iNomDot As Integer 'Position du premier point dans le nom de fichier.
Dim iNomBackslash As Integer 'Position du premier backslash dans le nom de fichier.
Dim BackslashTrouve As Boolean 'Indique si nom trouvons un backslash avant le point Dim DotTrouve As Boolean 'Indique si nous avons trouvé un point.
Dim NomFichierADecompErreur As Boolean 'Indique si l'utilisateur utilise un mauvais 'nom de fichier.
Dim LongueurNomFichier As Byte 'Indices qui sert à se positionner dans IndexBinaire.
Dim iIndexBin() As Integer - New Integer(1) {}
'Indique la borne maximum dans IndexBinaire.
Dim iIndexBinMax() As Integer = New Integer(1) {}
Dim iCourantIB As Byte - 0 Dim iSuivantIB As Byte = 1 Dim ChangerIndexBin() As Byte = New Byte(1) {1, 0}
Dim i As Integer 'Compteurs de boucle Dim k As Byte Dim i2 As Integer Dim iMax As Integer Dim iMin As Integer Dim Donnee As Byte 'Donnée courante lis dans le fichier.
Dim iIndexDon As Integer 'Position courante de lecture dans la liste de données.
Dim iIndexDonMax As Integer 'Indice du maximum de données contenu dans IndexDonnees.
Dim ValeurIB1 As Byte 'Valeur de l'index binaire 'Variables qui servent le mécanisme principale de décompression Dim ValeurIS1 As Byte 'Valeur de l'index segment Dim ValeurIS2 As Byte 'Valeur de l'index segment Dim ValeurIS3 As Byte 'Valeur de l'index segment Dim ValeurIS4Pos As Byte 'Valeur unifier des bit de l'index segment : 4 possibilités Dim ValeurVal4Pos As Byte 'Valeur unifier de 2 valeurs : 4 possibilités Dim DebutBin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUnite As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim DebutBinFin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUniteFin As Byte 'Indique si la prochaine unité doit tenir compte d'une suite 'Pour diminuer le nombre de traitements : le premier et le deuxième indique la valeur à
'sauvegarder dans la cible d'index segment, et le troisième est pour ProchainUnite Dim PremierChoix(,) As Byte = New Byte(3, 2) {{1, 0, 1}, {0, 0, 0}, {1, 1, 0}, {0, 1, 111 'Les 2 premiers ont pour la cible d'index segment et les 2 autres représente DebutBin et 'ProchainUnite.
Dim DeuxiemeChoix(õ) As Byte = New Byte(7, 1, 3) {
{{D, 0, 0, 01, {1, 0, 0, 111, {{0, 0, 0, 0}, {0, 0, 0, 011, Tous droits réservés, Mathias Robert-Thomas 19 Doc# MAT-0003-v295-FR
HO, 0, 0, 01, {1, 1, 1, 0}}, HO, 0, 0, 0), {0, 1, 1, 1}1, {{1, 1, 1, 0}, {0, 0, 0, 0}1, HO, 1, 1, 1), {0, 0, 0, 0}1, {{1, 0, 0, 1}, {0, 0, 0, 011, HO, 0, 0, 01, {0, 0, 0, OH}
Dim LongueurSegment As Byte Dim IndexSegment(,) As Byte = New Byte(1, 5) {}
Dim iIndexSeg() As Byte - New Byte(1) {0, 0}
Dim iCourantIS As Byte - 0 Dim iSuivantIS As Byte = 1 Dim ListeAjoutBit(õ) As Byte = New Byte(3, 3, 3) {
{{1, 1, 0, 0}, {1, 1, 0, 1}, {1, 0, 1, 1}, {1, 0, 1, 0}1, HO, 0, 0, 1), {0, 1, 0, 1}, {0, 0, 0, 0}, {0, 1, 0, 0}1, {{O, 0, 0, 01, {0, 0, 0, 1}, {0, 1, 1, 1}, {0, 1, 1, 0}}, {{1, 0, 1, 11, {1, 1, 1, 1}, {1, 0, 1, 0}, {1, 1, 1, 0}11 'Enlever les espace du nom de fichier NomFichierADecomp = Trim(EdFichierADecompresser.Text) DossierFichierACreer = Trim(EdDossierCibleDecomp.Text) LongueurNomFichier = Len(NomFichierADecomp) 'Initialiser les variables iNomDot LongueurNomFichier - 1 BackslashTrouve = False DotTrouve = False NomFichierADecompErreur = False '*** Implementation - Vérifier le nom du fichier à décompresser ***
'Lire l'extension du nom de fichier à décompresser While (((iNomDot > 0) And (Not BackslashTrouve)) And (Not DotTrouve)) If NomFichierADecomp.Chars(iNomDot) = "." Then DotTrouve = True Else If NomFichierADecomp.Chars(iNomDot) = "\" Then 'A ce point ci, le fichier à décompresser n'a pas d'extension BackslashTrouve = True iNomBackslash = iNomDot End If End If iNomDot = iNomDot - 1 End While 'Lire le restant du texte du nom de fichier à décompresser If DotTrouve Then iNomBackslash = iNomDot 'Essayer de trouver le caractère backslash While ((iNomBackslash > 0) And (Not BackslashTrouve)) If NomFichierADecomp.Chars(iNomBackslash) = "\" Then BackslashTrouve = True End If iNomBackslash = iNomBackslash - 1 End While If Not BackslashTrouve Then 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
'décompresser.
NomFichierADecompErreur True End If El se = If Not BackslashTrouve Then 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
'décompresser.
NomFichierADecompErreur = True End If End If (D Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
'Vérifier si une erreur a été trouvé dans le nom de fichier et le dossier du fichier à décompresser If Not NomFichierADecompErreur Then '*** Implementation - Commencer la décompression ***
.***************************************************
'Modifier le text du label de statut LbStatutMontre2.Text = "En cours..."
LbStatutMontre2.Refresh() 'Désactiver le contrôle à onglet TabControlel.Enabled = False ReDim ZipInfo.Index(1343) 'Ouvrir le fichier en mode binaire FileOpen(1, Trim(EdFichierADecompresser.Text), OpenMode.Binary) FileGet(1, ZipInfo, 1) 'Fermer le fichier à décompresser FileClose(1) NomFichierACreer = Trim(EdDossierCibleDecomp.Text) + ZipInfo.NomFichier 'Créer le fichier à recréer FichierACreer = System.IO.File.Create(NomFichierACreer) FichierACreer.Close() 'Ouvrir le fichier à recréer en mode binaire FileOpen(2, NomFichierACreer, OpenMode.Binary) i2 = 0 'Initialiser le tableau de valeurs avec l'index For i = 0 To 1343 For k = 0 To 7 IndexBinaire(0, i2) = DataFragmentB2(ZipInfo.Index(i), k) i2 = i2 + 1 Next Next iindexBinMax(iCourantIB) = ZipInfo.Fin '*** Tant qu'il y a des données à décompresser balayer. ***
'*** Ceci est la boucle centrale du processus de décompression. ***
,******************************************************************
For iIterations - 1 To ZipInfo.NbrIterations 'Initialiser les variables iIndexBin(iCourantIB) - 0 iIndexBin(iSuivantIB) = 0 'Balayer par groupe de 7 bits For i = 0 To 1074 For k = 0 To 5 IndexSegment(iCourantIS, k) = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) iIndexBin(iCourantIB) + 1 Next ProchainUniteFin = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 'Enlever 3 fois 2 binaire au segment For i2 = 2 To 0 Step -1 'Réinitialiser iIndexSeg au début Tous droits réservés, Mathias Robert-Thomas 21 Doc# MAT-0003-v295-FR
iIndexSeg(iCourantIS) = 0 iIndexSeg(iSuivantIS) = 2 'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) 'Unir les binaires sur 4 possibilités ValeurIS4Pos = TransB2aBlODemi(0, 0, ValeurIS1, ValeurIS2) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 DebutBin = ValeurIS1 ProchainUnite = PremierChoix(ValeurIS4Pos, 2) IndexSegment(iSuivantIS, 0) = PremierChoix(ValeurIS4Pos, 0) IndexSegment(iSuivantIS, 1) = PremierChoix(Va1eurIS4Pos, 1) LongueurSegment - (2 + ((i2 + 1) * 2)) - (i2 + 1) k = 1 While (k < LongueurSegment) If ProchainUnite = 1 Then 'Gérer la suite des termes 101, 1001, ou 1000 'Gérer la suite des termes 010, 0110, ou 0111 While (ProchainUnite = 1) And (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS) - 1) = 1 Else IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 End If Else If ValeurIB1 = 0 Then ProchainUnite = 0 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS) - 1) - 0 Else IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 1 iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) +
End If End If k= k+ 1 End While If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 Else k = k + 2 =
'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) If k > LongueurSegment Then ValeurIS3 = 0 Tous droits réservés, Mathias Robert-Thomas 22 Doc# MAT-0003-v295-FR
Else ValeurIS3 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 2) End If 'Unir les binaires sur 4 possibilités ValeurIS8Pos = TransB2aB1ODemi(0, ValeurIS1, ValeurIS2, ValeurIS3) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 2) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 3) End If Else k= k + 2 'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) If k > LongueurSegment Then ValeurIS3 = 0 Else ValeurIS3 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 2) End If 'Unir les binaires sur 4 possibilités ValeurIS8Pos = TransB2a810Demi(0, ValeurIS1, ValeurIS2, ValeurIS3) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 2) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 3) If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If End If If k >= LongueurSegment Then 'Tenir compte de ProchainUniteFin et affecter sa nouvelle valeur End If End While 'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) Tous droits réservés, Mathias Robert-Thomas 23 Doc# MAT-0003-v295-FR
Next Next 'Compléter l'index cible iMin = iIndexBin(iSuivantIB) For i = iMin To 10751 IndexBinaire(iSuivantIB, i) =
IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 Next iMax = iIndexBinMax(iCourantIB) - 1 'Transférer les données de l'index source vers IndexDonnees For i = iMax To iIndexBin(iCourantIB) Step -1 IndexDonnees(iIndexDonMax) = IndexBinaire(iCourantIB, i) iIndexDonMax = iIndexDonMax + 1 Next 'Enregistrer les données dans le fichier While iIndexDon < (iIndexDonMax - 7) Donnee = TransB2aBl0Complet(TransB2aBl0Demi32(0, IndexDonnees(iIndexDon), IndexDonnees(iIndexDon + 1), _ IndexDonnees(iIndexDon + 2), _ IndexDonnees(iIndexDon + 3)), TransB2aBl0Demi(IndexDonnees(iIndexDon + 4), _ IndexDonnees(iIndexDon + 5), _ IndexDonnees(iIndexDon + 6), _ IndexDonnees(iIndexDon, + 7))) iIndexDon = iIndexDon + 8 FilePut(2, Donnee) End While 'Ajuster le tableau de données lu dans l'index en déplaçant les données à la position 'de départ du tableau.
iMax = (iIndexDonMax - iIndexDon) - 1 For i = 0 To iMax IndexDonnees(i) = IndexDonnees(iIndexDon) iIndexDon = iIndexDon + 1 Next iIndexDon = 0 iIndexDonMax = iMax + 1 'Enregistrer l'indice maximum pour les autres itérations que la première iIndexBinMax(iSuivantIB) = 10752 'Changer l'indice courant et l'indice suivant iCourantIB = ChangerIndexBin(iCourantIB) iSuivantIB = ChangerIndexBin(iSuivantIB) BarreProgression2.Value = (iIterations / ZipInfo.NbrIterations) * 100 Next 'Fin de la boucle principale 'Fermer le fichier à recréer FileClose(2) 'Modifier le texte du label statut LbStatutMontre2.Text - "Complété!"
LbStatutMontre2.Refresh() 'Réactiver le contrôle à onglet Tous droits réservés, Mathias Robert-Thomas 24 Doc# MAT-0003-v295-FR
TabControlel.Enabled = True BarreProgression2.Value = 0 Else 'Modifier le texte du label statut LbStatutMontre.Text = "Erreur"
LbStatutMontre.Refresh() End If 'if Not NomFichierACompErreur End Sub Tous droits réservés, Mathias Robert-Thomas 25 Doc# MAT-0003-v295-FR
Concilavion Un prototype a été développé pour tester la vitesse. La compression est d'une vitesse satisfaisante. Même si le système n'a pas été testé en entier, nous pouvons évaluer que ça fonctionne. Un prototype complet sera développé prochainement.
La limite de données lus dans le fichier à chaque itération du processus est de 2688 binaires.
Merci à Sa Majesté la reine du Canada, Elizabeth Il, d'avoir permis le développement du Canada propice pour les inventeurs qui n'ont pas beaucoup de moyens financiers.
Merci à Eau, présente dans le Saint-Esprit, qui m'a conditionné fortement pour devenir un bon inventeur, c'est celle qui m'a fait grandir aussi pour que je devienne fort et instruit en m'envoyant des signes et des messages.
Merci à Jésus qui a fortifié le monde dans la droiture et qui a permis d'avoir des relations encourageantes avec les gens qui combattent le péché et qui favorise un environnement éduqué dans l'amour de Dieu.
Merci à Dieu qui a voyait que cette invention faisait partie de mon destin et qui m'a envoyé des signes et des messages à la fois encourageants.
Tous droits réservés, Mathias Robert-Thomas 28 Doc# MAT-0003-v295-FR
Gbssafire _ = = _....... = .....
ADN Acide désoxyribonucléique est une macromolécule biologique présente dans toutes les cellules ainsi que chez de nombreux virus. Est composé de
01 (la valeur #1 suivit par un autre # 1). Nous répétons ce processus pour toutes les données suivantes, pas seulement la donnée qui suit celle du départ.
La logique veut que la valeur cible se confirme étant de source 00 ou 10 dans le cas de 1*0. Si 11 indique 00 ou 10, la valeur cible suivante si c'est un 0, cela précise qu'il s'agit de 10 puisqu'il se termine par un 1 ou 01 ou 001, etc. formant les données 10-1 ou 10-0-1 ou 10-0-0-1. La même chose pour 1*1.
Si la valeur cible débute par 0 suivit de 10 suivit de 00, cela signifie que les données 00-11-00 ou 00-11-10 ont été lus. A la fin d'une série, nous ajoutons 2 à 3 bits pour confirmer la dernière donnée est-elle 00 ou 10 dans le cas de 1*0, et de 11 ou 01 dans le cas de 1*1.
Le premier départ se caractérise par une lecture de 4 bits. Puis nous ajouterons 2 ou 3 bits en provenance de l'index source pour créer la 2e série. Notez qu'en créant la 2e série, nous ajouterons en convertissant seulement les 2 ou 3 bits ajoutés. Donc, si nous avons les 4 bits de départ comme à la figure 4.2, c'est-à-dire 1111, converti cela s'écrit à la cible 1-01. Nous ajoutons 3 bits. Si au départ c'était 11-11, donc 2 fois #1, alors les 3 bits ajoutés à la 2e série suivent la série précédente non transformée.
Donc avec 001 ajoutés, cela est automatiquement transformé pour être enregistré à la cible (2e série), 1* 0.
Donc, nous avons 1*0 qui termine la 2e série, et le 3e bit ajouté sera utile à
la série suivante dans ce cas-ci puisque nous n'avons pas eu à l'utiliser. Par exemple, si le départ avait été
formé de 10-0-0 alors dans ce cas-ci les 3 valeurs ajoutées auraient servi à la 2e série.
A la fin, après les 3 séries transformées, une dernière transformation aura lieu, mais il n'y a que 2 bits ajoutés. Si la dernière valeur est inutile, elle ne sera pas transformée.
Nous retenons 1 bit supplémentaire avant la dernière transformation pour savoir si c'est 00 ou 10 dans le cas de 1*0. Même chose pour 1*1. Ce bit supplémentaire sera ajouté à la suite de la dernière transformation lors de l'enregistrement du résultat final dans l'index cible.
Note : lors du dernier ajout, à la 4e série, si c'est en continu, donc si l'ajout à la 3e série était 10 ou 01 ou une continuité, alors à la 4e série, nous transformons 1 seul bit ajouté, l'autre demeure comme telle.
Le bilan fait que sur 12 bits en moyenne que nous lisons, nous récrivons cela sur 9 bits en moyenne. Ce qui donne un taux de compression (ou vitesse) de 25 %, à chaque fois que nous repassons sur un bloc de 10 752 bits, nous éliminons environs 2700 bits. Et vu que la méthode est très rapide, c'est une compression plus-ultra. En libérant de l'espace, nous reremplissons le bloc avec de nouvelles données et nous poursuivons la compression.
En réalité c'est une compression d'espace recréé techniquement parlant, qui est le début d'une découverte sur l'ADN, car il est peut-être possible de lire l'ADN avec cette formule.
Variances :
- Nous pouvons exécuter plus ou moins de 4 séries, un minimum de 2 est requis cependant ;
- L'ajout de bits à la fin des séries peut varier en nombre, cependant avec seulement 2 bits ajoutés, et ce de façon constante, requiert des tableaux de constitution, un de 2048 lignes, deux de 512 lignes, un de 128 lignes et un de 32 lignes. Mais c'est moins efficace ;
- La série du début peut être plus ou moins de 4 bits. ;
- Toutes autres variances selon le code unaire peuvent être employées.
Tous droits réservés, Mathias Robert-Thomas 7 Doc# MAT-0003-v295-FR
5. Le cod.e iecompFessbn de données ire étape :
Voici le code de programmation en Visual Basic pour cette première étape de programmation :
.******************************************
,*** Déclaration des variables globales ***
.******************************************
'Utiliser pour diviser un nombre base 10 en base 2 Dim DataFragmentB2 (, ) As Byte = New Byte (255, 7) {
{0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 1, 0}, {070, 0, 0, 0, 0, 1, 1}, _ {0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 1}, {0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 1, 1, 1}, _ {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 0, 1, 0, 1, 0}, {0, 0, 0, 0, 1, 0, 1, 1}, _ {0, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 0, 1, 1, 0, 1}, {0, 0, 0, 0, 1, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 1}, _ {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 1}, _ {0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 1, 0, 1}, {0, 0, 0, 1, 0, 1, 1, 0}, {0, 0, 0, 1, 0, 1, 1, 1}, _ {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 1}, {0, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, _ {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 1}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 1}, _ {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 1, 1}, _ {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, _ {0, 0, 1, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 1, 1}, _ {0, 0, 1, 0, 1, 1, 0, 0}, {0, 0, 1, 0, 1, 1, 0, {0, 0, 1, 0, 1, 1, 1, 0}, {0, 0, 1, 0, 1, 1, 1, 1}, _ {0, 0, 1, 1, 0, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 1, 1, 0, 0, 1, 0}, {0, 0, 1, 1, 0, 0, 1, 1}, _ {0, 0, 1, 1, 0, 1, 0, 0}, {0, 0, 1, 1, 0, 1, 0, 1}, {0, 0, 1, 1, 0, 1, 1, 0}, {0, 0, 1, 1, 0, 1, 1, 1}, _ {0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 1}, {0, 0, 1, 1, 1, 0, 1, 0}, {0, 0, 1, 1, 1, 0, 1, 1}, _ {0, 0, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 0, 1}, {0, 0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, _ {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 1, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, _ {0, 1, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 1}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 1, 0, 0, 0, 1, 1, 1}, _ {0, 1, 0, 0, 1,0, 0, 0}, {0, 1, 0, 0, 1, 0,0, 1}, {0, 1, 0,0, 1,0, 1, 0}, {0, 1, 0, 0, 1,0, 1, 1}, _ {0, 1, 0, 0, 1, 1,0, 0}, {0, 1, 0, 0, 1, 1, 0, 1}, {0, 1, 0,0, 1, 1, 1, 0}, {0, 1, 0,0, 1, 1, 1, 1}, _ {0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 0, 0, 1}, {0, 1, 0, 1, 0,0, 1, 0}, {0, 1, 0, 1, 0,0, 1, 1}, _ {0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 1}, {0, 1, 0, 1, 0, 1, 1, 0}, {0, 1, 0, 1, 0, 1, 1, 1}, _ {0, 1, 0, 1, 1, 0, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {0, 1, 0, 1, 1,0, 1, 0}, {0, 1, 0, 1, 1,0, 1, 1}, _ {0, 1, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 1}, {0, 1, 0, 1, 1, 1, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 1}, _ {0, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0, 0, 1}, {0, 1, 1, 0, 0, 0, 1, 0}, {0, 1, 1, 0, 0, 0, 1, 1}, _ {0, 1, 1, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 1}, {0, 1, 1, 0, 0, 1, 1, 0}, {0, 1, 1, 0, 0, 1, 1, 1), _ {0, 1, 1, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 1}, {0, 1, 1, 0, 1, 0, 1, 0}, {0, 1, 1, 0, 1, 0, 1, 1}, _ {0, 1, 1, 0, 1, 1, 0, 0}, {0, 1, 1, 0, 1, 1, 0, 1}, {0, 1, 1,0, 1, 1, 1, 0), {0, 1, 1, 0, 1, 1, 1, _ {0, 1, 1, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 1), {0, 1, 1, 1, 0, 0, 1, 0}, {0, 1, 1, 1, 0, 0, 1, 11, _ {0, 1, 1, 1,0, 1, 0, 0), {0, 1, 1, 1, 0, 1,0, 1), {0, 1, 1, 1,0, 1, 1, 0), {0, 1, 1, 1, 0, 1, 1, 1), _ {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 1, 1, 1, 0,0, 1}, {0, 1, 1, 1, 1,0, 1, 0), {0, 1, 1, 1, 1,0, 1, 1), _ {0, 1, 1, 1, 1, 1,0, 0}, {0, 1, 1, 1, 1, 1,0, 1}, {0, 1, 1, 1, 1, 1, 1, 01, {0, 1, 1, 1, 1, 1, 1, 1}, _ {1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 1), {1, 0, 0, 0, 0, 0, 1, 01, {1, 0, 0, 0, 0, 0, 1, 1), _ {1, 0,0, 0, 0, 1,0, 0}, {1, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0}, {1, 0,0, 0, 0, 1, 1, _ {1, 0,0, 0, 1, 0,0, 0}, {1, 0, 0, 0, 1, 0,0, 1}, {1, 0, 0,0, 1,0, 1, 0}, {1, 0, 0, 0, 1,0, 1, 1}, _ {1, 0,0, 0, 1, 1,0, 0}, {1, 0, 0, 0, 1, 1,0, 1), {1, 0, 0,0, 1, 1, 1, 0}, {1, 0,0, 0, 1, 1, 1, 1), _ {1, 0,0, 1,0, 0,0, 0}, {1, 0, 0, 1, 0, 0,0, 1), {1, 0, 0, 1, 0, 0, 1, 0), {1, 0,0, 1, 0,0, 1, 11, _ {1, 0, 0, 1, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 1, 0, 1), {1, 0, 0, 1, 0, 1, 1, 0}, {1, 0, 0, 1, 0, 1, 1, 1), _ {1, 0, 0, 1, 1, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 1), {1, 0, 0, 1, 1, 0, 1, 0), {1, 0, 0, 1, 1, 0, 1, 1), _ {1, 0,0, 1, 1, 1,0, 0}, {1, 0,0, 1, 1, 1,0, 1), {1, 0, 0, 1, 1, 1, 1, 0), {1, 0,0, 1, 1, 1, 1, 1}, _ {1, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 1), {1, 0, 1, 0, 0, 0, 1, 0), {1, 0, 1, 0, 0,0, 1, 1}, _ {1, 0, 1, 0, 0, 1, 0, 0}, {1, 0, 1, 0, 0, 1, 0, 1}, {1, 0, 1, 0, 0, 1, 1, 0}, {1, 0, 1, 0, 0, 1, 1, 1}, _ {1, 0, 1, 0, 1, 0,0, 0}, {1, 0, 1,0, 1, 0,0, 1}, {1, 0, 1,0, 1,0, 1, 01, {1, 0, 1, 0, 1,0, 1, 1}, _ {1, 0, 1, 0, 1, 1, 0, 0}, {1, 0, 1, 0, 1, 1, 0, 1), {1, 0, 1, 0, 1, 1, 1, 01, {1, 0, 1, 0, 1, 1, 1, 1}, _ {1, 0, 1, 1, 0, 0, 0, 0}, {1, 0, 1, 1, 0, 0, 0, 1), {1, 0, 1, 1, 0, 0, 1, 0}, {1, 0, 1, 1, 0, 0, 1, 1}, _ {1, 0, 1, 1, 0, 1, 0, 0}, {1, 0, 1, 1, 0, 1, 0, 1}, {1, 0, 1, 1, 0, 1, 1, 0}, {1, 0, 1, 1, 0, 1, 1, 1}, _ {1, 0, 1, 1, 1, 0, 0, 0), {1, 0, 1, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 1, 0}, {1, 0, 1, 1, 1, 0, 1, 1}, _ 0 Tous droits réservés, Mathias Robert-Thomas Docl* MAT-0003-v295-FR
{1, o, 1, 1, 1, 1, o, o}, {1, 0,1,1, 1, 1, o,1}, {1, o, 1, 1, 1,1,1, o}, {1, o, 1, 1,1, 1, 1, 1}, _ 11, 1, o, o, o, o, o, 01, {1,1, o, o, a, o, a, lb {1,1, o, o, 0,0, 1, o}, {1,1, o, o, 0,0, 1, 1}, _ 11, 1,0, o, o, 1, o, 01, {1,1, 0, 0,0, 1,0, {1,1, o, 0, 0,1, 1, {1,1, o, o, 1, _ {1, 1, 0, o, 1, o, o, o}, {1, 1, o, o, 1, o, o,1}, {1,1, o, o, 1, o, 1, o}, o, 1, o, _ {1, 1, 0, o, o}, {1, 1, o, o, 1, 1, o,1}, {1,1, a, o, {1, 1, o, o, 1, 1, 1, _ {1, 1, o, 1, 0, o, 0, o}, {1, 1, o, 1, o, o, o,1}, {1,1, o, 1, 0,0, 1, 0}, {1,1, o, 1, 0, 0, 1, 1}, _ {1, 1, o, 1, o, 1, o, 0}, {1,1, o, 1, 0, 1, 0, 1}, {1,1, o, 1, 0,1, 1, o}, {1, 1, o, 1, 0, 1, 1, 1}, _ {1, 1, o, 1, 1, o, o, 0}, {1,1, o, 1, 1, o, a, {1,1, o, 1, 1,0, 1, oh {1,1, o, 1, 1,0, 1, 1}, _ {1, 1, o, 1, 1, 1, o, 0}, {1,1, 0, o, {1,1, o, 1, 1, 1, 1, 0}, {1,1, o, 1, 1, 1, 1, 1}, _ {1, 1, 1, o, o, o, 0, 0}, o, o, o, o, o, o, o, ta}, o, o, o, _ {1, 1, 1, o, 0, 1, 0, 0}, {1,1,1,0,0,1,0,1}, {1,1,1,0,0,1,1,0}, {1,1,1,0,0,1, 1, 1}, _ {1, 1, 1, 0,1,0,0,0}, {1, 1, 1,0, 1,0,0, 1}, {1,1,1,0,1,0,1,0}, {1,1,1,0,1,0,1,1}, _ {1, 1, 1,0,1,1,0,0}, {1,1, 1, 0,1, 1,0, 1}, {1,1,1,0,1,1,1,0}, {1, 1,1, 0, 1, 1, 1, 1}, _ {1, 1, 1,1,0,0,0, 0}, {1,1,1,1,0,0,0,1}, {1,1,1,1,0,0,1,0}, {1,1,1,1,0,0,1,1}, _ {1, 1, 1,1, 0,1, 0, 0}, {1,1, 1,1,0,1,0, {1,1,1,1,0,1,1,0}, {1,1,1,1,0,1,1,1}, _ {1, 1, 1, 1, 1,0, 0, 0}, {1, 1,1, 1, 1,0, 0, 1}, {1,1,1,1,1,0,1,0}, {1,1,1,1,1,0,1, _ {1, 1, 1,1, 1, 1,0, 0}, {1,1,1,1,1,1,0, J}, {1,1,1,1,1,1,1,0}, {1,1,1,1,1,1,1,1 'Contient la plage de données à traiter.
Dim IndexBinaire(,) As Byte = New Byte(1, 10751) {}
'Contient les données lues du fichier.
Dim IndexDonnees() As Byte = New Byte(6463) {}
'Initialisation de Index avec des données aléatoires de nombres entre 0 et 127 Dim Index() As Byte = New Byte(511) {26, 93, 28, 20, 26, 33, 7, 66, 92, 7, 118, 84, 84, 20, 95, 60, 30, 29, 101, 58, 12, 8, 27, 38, 112, 103, 63, 75, 66, 15, 40, 114, 45, 37, 69, 116, 99, 121, 121, 1, 10, 47, 1, 32, 38, 111, 29, 24, 118, 48, 21, 13, 4, 96, 66, 112, 80, 6, 69, 24, 82, 111, 13, 56, 68, 106, 123, 100, 127, 106, 79, 29, 17, 66, 44, 86, 55, 31, 19, 41, 107, 36, 83, 102, 63, 22, 26, 19, 42, 59, 34, 104, 75, 79, 48, 39, 0, 97, 2, 71, 101, 122, 31, 114, 55, 22, 79, 44, 96, 78, 3, 76, 57, 72, 98, 1, 49, 42, 21, 102, 34, 109, 41, 95, 111, 8, 124, 85, 39, 90, 36, 28, 73, 88, 65, 104, 91, 114, 121, 52, 55, 76, 96, 21, 93, 103, 32, 92, 33, 79, 89, 56, 33, 0, 50, 76, 91, 94, 87, 86, 9, 62, 125, 118, 37, 14, 35, 44, 77, 87, 69, 2, 74, 117, 99, 68, 59, 85, 78, 74, 88, 61, 10, 67, 117, 77, 12, 42, 50, 87, 24, 81, 14, 45, 25, 15, 27, 113, 125, 82, 125, 61, 26, 22, 34, 89, 8, 36, 70, 8, 97, 18, 81, 55, 69, 64, 88, 16, 103, 9, 89, 64, 124, 64, 122, 11, 94, 126, 77, 16, 51, 72, 3, 9, 82, 98, 21, 110, 49, 63, 51, 51, 24, 109, 16, 80, 72, 83, 125, 25, 88, 5, 120, 12, 70, 19, 43, 28, 0, 108, 115, 26, 100, 92, 97, 46, 107, 43, 99, 127, 68, 5, 18, 7, 54, 11, 106, 110, 51, 113, 54, 91, 81, 40, 52, 32, 57, 109, 54, 81, 126, 116, 98, 41, 118, 102, 48, 112, 20, 84, 113, 62, 123, 115, 25, 49, 116, 27, 89, 50, 95, 90, 34, 104, 23, 6, 2, 32, 84, 57, 33, 20, 121, 115, 73, 50, 2, 38, 74, 52, 112, 10, 62, 6, 37, 65, 39, 67, 65, 56, 119, 57, 30, 45, 60, 104, 54, 109, 60, 17, 123, 46, 9, 103, 78, 75, 98, 68, 96, 49, 58, 107, 13, 47, 91, 11, 105, 105, 108, 83, 85, 110, 23, 14, .43, 18, 83, 120, 101, 4, 80, 80, 53, 100, 53, 74, 119, 39, 72, 111, 58, 76, 23, 13, 48, 35, 77, 46, 58, 38, 22, 93, 60, 127, 73, 67, 97, 105, 127, 10, 123, 78, 40, 75, 90, 23, 71, 36, 7, 14, 12, 65, 124, 47, 40, 25, 115, 56, 3, 86, 44, 71, 59, 0, 18, 43, 107, 1, 30, 4, 17, 94, 120, 61, 59, 99, 122, 42, 35, 120, 15, 93, 5, 52, 4, 110, 122, 45, 113, 31, 106, 28, 95, 35, 53, 30, 11, 119, 37, 3, 71, 61, 19, 73, 63, 70, 119, 126, 90, 102, 46, 86, 67, 126, 108, 105, 100, 47, 92, 53, 27, 108, 5, 85, 114, 82, 117, 70, 15, 64, 16, 6, 17, 41, 101, 117, 29, 116, 62, 94, 87, 31}
'*** Déclaration des variables locales ***
'Indices qui sert à se positionner dans IndexBinaire.
Dim iIndexBin() As Integer = New Integer(1) {0, 0}
'Indique la borne maximum dans IndexBinaire.
Dim iIndexBinMax() As Integer = New Integer(1) {0, 0}
Dim iIndexBinMaxCopie As Integer Dim iCourantIB As Byte - 0 Dim iSuivantIB As Byte - 1 Dim ChangerIndexBin() As Byte = New Byte(1) {1, 0}
'Indices de boucle Dim i As Integer Dim k As Byte Dim 1 As Byte Dim i2 As Integer Dim k2 As Byte Tous droits réservés, Mathias Robert-Thomas 9 Doc# MAT-0003-v295-FR
Dim k3 As Bytc Dim iMax As Integer Dim iMax2 As Integer Dim NbrDonneesAComp As Integer 'Indique le nombre de données à compresser.
Dim Donnee As Byte 'Donnée courante lue dans le fichier.
Dim iFichier As Long 'Indice de la position courante de lecture dans le fichier.
Dim iIndexDon As Integer = 0 'Position courante de lecture dans la liste de données.
Dim iIndexDonMax As Integer = 0 'Indice du maximum de données contenu dans la liste.
Dim ValeurIB1 As Byte 'Valeur de l'index binaire Dim ValeurIB2 As Byte Dim ValeurIB3 As Byte Dim ValeurIB4 As Byte Dim ValeurIB5 As Byte Dim ValeurIB6 As Byte Dim ValeurIB7 As Byte Dim ValeurIB8 As Byte 'Variables qui servent le mécanisme principal de compression Dim ValeurIB4Pos As Byte 'Valeur unifier des bit de l'index binaire : 4 possibilités Dim ValeurVal4Pos As Byte 'Valeur unifier de 2 valeurs : 4 possibilités Dim DebutBin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUnite As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim DebutBinFin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUniteFin As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim PremierChoix(,) As Byte = New Byte(3, 2) HO, 0, 0j, {1, 1, 1}, {0, 0, 1}, {1, 1, 0}}
Dim DeuxiemeChoix(õ) As Byte - New Byte(3, 1, 1) {{{1, 1}, {0, 0}}, {{1, 1}, {0, 0}}, {{1, 0}, {0, 1}}, {{1, 0}, {0, 1}}}
Dim LongueurSegment As Byte Dim IndexSegment(,) As Byte = New Byte(1, 6) {}
Dim iIndexSeg() As Byte = New Byte(1) {0, 0}
Dim iCourantIS As Byte = 0 Dim iSuivantIS As Byte - 1 Dim ListeAjoutBit(õ) As Byte = New Byte(3, 3, 3) {
{{1, 1, 0, 0}, {1, 1, 0, 1}, {1, 0, 1, 1}, {1, 0, 1, 0}1, HO, 0, 0, 11, {0, 1, 0, 1}, {0, 0, 0, 0}, {0, 1, 0, 0}1, HO, 0, 0, 0}, {0, 0, 0, 1}, {0, 1, 1, 1}, {0, 1, 1, 0}1, {{1, 0, 1, 11, {1, 1, 1, 1}, {1, 0, 1, 0}, {1, 1, 1, 0}1}
,*****************************************************
'*** Code à la suite des déclarations de variables ***
'Initialiser IndexBinaire avec des données aléatoires For 1 - 0 To 2 For i = 0 To 511 For k = 1 To 7 'Remplir IndexBinaire IndexBinaire(0, iIndexBin(0)) = DataFragmentB2(Index(i), k) iIndexBin(0) = iIndexBin(0) + 1 Next Next Next iIndexBinMax(0) iIndexBin(0) 1***********************************************
'*** Code à mettre dans la boucle principale ***
,***********************************************
'Réinitialiser iIndexBin au début iIndexBin(iCourantIB) = 0 iIndexBin(iSuivantIB) = 0 'Balayer l'index source et copier les nouvelles valeurs dans l'index cible 'Balayer par groupe de 10 bits For i = 0 To 1074 'Réinitialiser iIndexSeg au début iIndexSeg(iCourantIS) - 0 Tous droits réservés, Mathias Robert-Thomas 10 Doc# MAT-0003-v295-FR
iIndexSeg(iSuivantIS) = 0 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) Va1eurIB2 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aBlODemi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = PremierChoix(ValeurIB4Pos, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(ValeurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) If ProchainUnite = 1 Then 'Gérer la suite des termes 101 ou 100 'Gérer la suite des termes 010 ou 011 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 El se If ValeurIB1 = 0 Then ProchainUnite 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) - 1 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 Else 'Lire l'index source ValeurIB1 IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) ValeurIB2 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aB10Demi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(ValeurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) End If Tous droits réservés, Mathias Robert-Thomas 11 Doc# MAT-0003-v295-FR
'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) DebutBinFin = DebutBin ProchainUniteFin = ProchainUnite 'Ajouter 3 fois 2 binaire au segment For k2 = 0 To 2 'Lire l'index source ValeurIB1 = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) ValeurIB2 IndexBinaire(iCourantIB, iIndexBin(iCourantIB) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aBlODemi(0, 0, ValeurIB1, ValeurIB2) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 2 ValeurVal4Pos TransB2aB10Demi(0, 0, DebutBinFin, ProchainUniteFin) LongueurSegment - (2 + ((k2 + 1) * 2)) - k2 'Ajouter 2 binaire à IndexSegment IndexSegment(iCourantIS, LongueurSegment - 1) - ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 0) IndexSegment(iCourantIS, LongueurSegment) = ListeAjoutBit(ValeurVal4Pos, Va1eurIB4Pos, 1) DebutBinFin ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 2) ProchainUniteFin = ListeAjoutBit(ValeurVal4Pos, ValeurIB4Pos, 3) iIndexSeg(iCourantIS) = 0 iIndexSeg(iSuivantIS) 0 k= 0 While (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIB2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) 'Unir les binaires sur 4 possibilités ValeurIB4Pos = TransB2aB10Demi(0, 0, ValeurIB1, ValeurIB2) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = PremierChoix(ValeurIB4Pos, 0) iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = PremierChoix(Va1eurIB4Pos, 1) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = PremierChoix(ValeurIB4Pos, 2) k = k + 2 If ProchainUnite = 1 Then 'Gérer la suite des termes 101, 1001, ou 1000 'Gérer la suite des termes 010, 0110, ou 0111 While (ProchainUnite = 1) And (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 End If Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) - 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 Else If ValeurIB1 - 0 Then ProchainUnite = 0 End If IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 1 iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) + 1 End If k = k + 1 End While If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) -IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If El se If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) -IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If End If End While 'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) Next For k = 0 To 5 IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) -IndexSegment(iCourantIS, k) iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) = ProchainUniteFin iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next 'Enregistrer les bits de la fin For i = iIndexBin(iCourantIB) To 10751 IndexBinaire(iSuivantIB, iIndexBin(iSuivantIB)) = IndexBinaire(iCourantIB, i) iIndexBin(iSuivantIB) = iIndexBin(iSuivantIB) + 1 Next 'Enregistrer l'indice maximum iIndexBinMax(iSuivantIB) = iIndexBin(iSuivantIB) 'Inverser l'indice courant et l'indice suivant iCourantIB = ChangerIndexBin(iCourantIB) iSuivantIB = ChangerIndexBin(iSuivantIB) If (iIndexDonMax - iIndexDon) < 3231 Then NbrDonneesAComp = 3232 End If 'Lire dans le fichier à compresser 'Remplir IndexDonnees jusqu'à nécessité
While (iFichier > 0) And (NbrDonneesAComp > 0) 'Lire le fichier FileGet(1, Donnee, iFichier) iFichier = iFichier - 1 For k = 0 To 7 IndexDonnees(iIndexDonMax) = DataFragmentB2(Donnee, k) Tous droits réservés, Mathias Robert-Thomas 13 Doc# MAT-0003-v295-FR
iIndexDonMax = iIndexDonMax + 1 Next NbrDonneesAComp = NbrDonneesAComp - 8 End While iMax = (10751 - iIndexBinMax(iCourantIB)) 'Vérifier s'il y a débordement du nombre de données disponibles par rapport à
la quantité
'demandée If iMax > ((iIndexDonMax - iIndexDon) - 1) Then iMax = (iIndexDonMax - iIndexDon) - 1 End If 'Transférer les données dans l'index binaire For i 0 To iMax IndexBinaire(iCourantIB, iIndexBinMax(iCourantIB)) = IndexDonnees(iIndexDon) iIndexBinMax(iCourantIB) = iIndexBinMax(iCourantIB) + 1 iIndexDon = iIndexDon + 1 Next 'Ajuster le tableau de données lu dans le fichier en déplaçant les données à
la position 'de départ du tableau.
iMax = (iIndexDonMax - iIndexDon) - 1 For i = 0 To iMax IndexDonnees(i) = IndexDonnees(iIndexDon) iIndexDon = iIndexDon + 1 Next iIndexDon = 0 iIndexDonMax = iMax + 1 Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
2e étape :
La deuxième étape consiste à afficher le code général qui accompagne le code de compression.
Voici le code de programmation en Visual Basic pour cette deuxième étape de programmation, ce code comprend toutes les parties de la fonction de compression et il est indiqué où sont les autres blocs de code des autres étapes de tout l'algorithme de compression :
'*** Déclaration des variables globales ***
,******************************************
'Nous utilisons cette structure pour sauvegarder le fichier Public Structure ZipInformation Public NbrIterations As Long Public Fin As Integer Public Index() As Byte <VBFixedString(256)> Public NomFichier As String 'Le nom du fichier à
compresser End Structure 'Les 3 tableaux qui suivent servent à composer un nombre en base 10 à partir de la base 2 Dira TransB2aBl0Demi(õ,) As Byte = New Byte(1, 1, 1, 1) {
{{{0, 1}, {2, 3}1, {{4, 5), {6, 7}11, {{{8, 91, {10, 111), {{12, 13}, {14, 15}}1}
'Les 3 tableaux qui suivent servent à composer un nombre en base 10 à partir de la base 2 Dira TransB2aBl0Demi32(õõ) As Byte - New Byte(1, 1, 1, 1, 1) {
{{{{0, 1}, {2, 3}1, {{4, 5}, {6, 7}11, {{{8, 9}, {10, 11}1, {{12, 13), {14, 15}}}}, {{{{16, 17}, {18, 19}}, {{20, 21}, {22, 23}}1, {{{24, 25}, {26, 27}), {128, 29), {30, 31})}11 Dira TransB2aBl000mplet(,) As Integer = New Integer(31, 15) {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63), {64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}, {128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191}, {192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}, {256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319}, {320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 3831, {384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447), {448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511}}
Tous droits réservés, Mathias Robert-Thomas 15 Doc# MAT-0003-v295-FR
Public Sub Compresser() ,*****************************************
'*** Déclaration des variables locales ***
r*****************************************
Dim ZipInfo As ZipInformation 'Structure qui a toute les informations de 'compression.
Dim NomFichierAComp As String 'Le nom du fichier à
compresser.
Dim NomFichierACreer As String 'Le nom du fichier à créer.
Dim DossierFichierACreer As String Dim FichierACreer As System.IO.FileStream 'Utiliser pour créer le nouveau fichier ".mag".
Dim iNomDot As Integer 'Position du premier point dans le nom de fichier.
Dim iNomBackslash As Integer 'Position du premier backslash dans le nom de 'fichier.
Dim LongueurNomFichier As Integer 'Longueur du nom de fichier à compresser.
Dim BackslashTrouve As Boolean 'Indique si nom trouvons un backslash avant le point Dim DotTrouve As Boolean 'Indique si nous avons trouvé un point.
Dim NomFichierACompErreur As Boolean 'Indique si l'utilisateur utilise un mauvais 'nom de fichier.
Dim LongueurFichier As Long 'Longueur du fichier Dim NbrIterations As Long 'Enlever les espace du nom de fichier NomFichierAComp = Trim(EdFichierACompresser.Text) DossierFichierACreer = Trim(EdDossierCibleComp.Text) LongueurNomFichier = Len(NomFichierAComp) 'Initialiser les variables iNomDot = LongueurNomFichier - 1 BackslashTrouve = False DotTrouve = False = NomFichierACompErreur = False NbrIterations = 0 r****************************************************************
'*** Implementation - Vérifier le nom du fichier à compresser ***
'Lire l'extension du nom de fichier à compresser While (((iNomDot > 0) And (Not BackslashTrouve)) And (Not DotTrouve)) If NomFichierAComp.Chars(iNomDot) = "." Then DotTrouve = True Else If NomFichierAComp.Chars(iNomDot) = "\" Then 'A ce point ci, le fichier à compresser n'a pas d'extension BackslashTrouve = True iNomBackslash = iNomDot End If End If iNomDot = iNomDot - 1 End While 'Lire le restant du texte du nom de fichier à compresser If DotTrouve Then iNomBackslash = iNomDot 'Essayer de trouver le caractère backslash While ((iNomBackslash > 0) And (Not BackslashTrouve)) If NomFichierAComp.Chars(iNomBackslash) = "\" Then BackslashTrouve = True End If Tous droits réservés, Mathias Robert-Thomas =
Doc# MAT-0003-v295-FR
iNomBackslash = iNomBackslash - 1 End While If BackslashTrouve Then ZipInfo.NomFichier = NomFichierAComp.Substring(iNomBackslash + 1, _ LongueurNomFichier - (iNomBackslash + 1)) NomFichierACreer = DossierFichierACreer & "\" &
NomFichierAComp.Substring(iNomBackslash LongueurNomFichier - (LongueurNomFichier - (iNomDot + 1)) -(iNomBackslash + 1)) & ".dna"
Mise 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
compresser NomFichierACompErreur = True End If Else If BackslashTrouve Then ZipInfo.NomFichier = NomFichierAComp.Substring(iNomBackslash + 1, _ LongueurNomFichier - (iNbmBackslash + 1)) NomFichierACreer = DossierFichierACreer & "\" & _ ZipInfo.NomFichier & ".dna"
El se 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
compresser NomFichierACompErreur = True End If End If 'Vérifier si une erreur a été trouvé dans le nom de fichier et le dossier du fichier à compresser If Not NomFichierACompErreur Then ,*************************************************
'*** Implementation - Commencer la compression ***
,*************************************************
'Modifier le text du label de statut LbStatutMontre.Text = "En cours..."
LbStatutMontre.Refresh() 'Désactiver le contrôle à onglet TabControlel.Enabled = False 'Ouvrir le fichier en mode binaire FileOpen(1, Trim(EdFichierACompresser.Text), OpenMode.Binary) 'Lire la longueur du fichier LongueurFichier = LOF(1) 'Initialiser la position courante de lecture du fichier iFichier = LongueurFichier ReDim ZipInfo.Index(1343) 'Pour éviter que les fichiers à longueur nul provoque une division par 0 à la 'gestion de la barre de progression.
If LongueurFichier = 0 Then LongueurFichier = 1 End If '*** Tant qu'il y a des données à compresser balayer. ***
'*** Ceci est la boucle centrale du processus de compression. *** =
While Mot (iIndexBinMax(iCourantIB) < 10752) '*** Mettre le code de l'étape 1 ici. ***
'*** Sauf les déclarations de variables locales ***
'*** qui vont au début de la fonction. ***
,**************************************************
BarreProgressionl.Value = ((LongueurFichier - iFichier) /
Tous droits réservés, Mathias Robert-Thomas 17 Doc# MAT-0003-v295-FR
LongueurFichier) * 100 NbrIterations = NbrIterations + 1 End While 'Fin de la boucle principale 'Fermer le fichier à compresser FileClose(1) 'Sauvegarder les informations de compression dans une structure ZipInfo.NbrIterations = NbrIterations ZipInfo.Fin = iIndexBinMax(iCourantIB) i2 = 0 'Sauvegarder l'index For i = 0 To 1343 ValeurIB1 IndexBinaire(iCourantIB, i2) Va1eurIB2 = IndexBinaire(iCourantIB, i2 + 1) ValeurIB3 IndexBinaire(iCourantIB, i2 + 2) Va1eurIB4 = IndexBinaire(iCourantIB, i2 + 3) ValeurIB5 = IndexBinaire(iCourantIB, i2 + 4) ValeurIB6 = IndexBinaire(iCourantIB, i2 + 5) ValeurIB7 = IndexBinaire(iCourantIB, i2 + 6) ValeurIB8 IndexBinaire(iCourantIB, i2 + 7) i2 = i2 + 8 ZipInfo.Index(i) = TransB2aB10Complet( _ TransB2aB10Demi32(0, ValeurIB1, ValeurIB2, ValeurIB3, ValeurIB4), TransB2aB10Demi(ValeurIB5, ValeurIB6, Va1eurIB7, ValeurIB8)) Next 'Créer le fichier ".dna"
FichierACreer = System.IO.File.Create(NomFichierACreer) FichierACreer.Close() 'Ouvrir le fichier ".dna" en mode binaire FileOpen(2, NomFichierACreer, OpenMode.Binary) 'Sauvegarder la structure dans le fichier FilePut(2, ZipInfo) 'Fermer le fichier ".dna"
FileClose(2) 'Modifier le texte du label statut LbStatutMontre.Text = "Complété!"
LbStatutMontre.Refresh() 'Réactiver le contrôle à onglet TabControlel.Enabled = True BarreProgressionl.Value = 0 Else 'Modifier le texte du label statut LbStatutMontre.Text = "Erreur"
LbStatutMontre.Refresh() End If 'if Not NomFichierACompErreur End Sub Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
o 0 a 6,3 Le co d e e decomprressoon de donnees _=_=_=_=_=_=_=_=_ ____________ _ ,.*****************************************
'*** Déclaration des variables globales ***
.******************************************
Public Sub Decompresser() '*** Déclaration des variables locales ***
.*****************************************
Dim ZipInfo As ZipInformation 'Structure qui a toute les informations de 'compression.
Dim NomFichierADecomp As String 'Le nom du fichier à décompresser.
Dim NomFichierACreer As String 'Le nom du fichier à créer.
Dim DossierFichierACreer As String Dim FichierACreer As System.IO.FileStream 'Utiliser pour créer le nouveau fichier ".mag".
Dim iNomDot As Integer 'Position du premier point dans le nom de fichier.
Dim iNomBackslash As Integer 'Position du premier backslash dans le nom de fichier.
Dim BackslashTrouve As Boolean 'Indique si nom trouvons un backslash avant le point Dim DotTrouve As Boolean 'Indique si nous avons trouvé un point.
Dim NomFichierADecompErreur As Boolean 'Indique si l'utilisateur utilise un mauvais 'nom de fichier.
Dim LongueurNomFichier As Byte 'Indices qui sert à se positionner dans IndexBinaire.
Dim iIndexBin() As Integer - New Integer(1) {}
'Indique la borne maximum dans IndexBinaire.
Dim iIndexBinMax() As Integer = New Integer(1) {}
Dim iCourantIB As Byte - 0 Dim iSuivantIB As Byte = 1 Dim ChangerIndexBin() As Byte = New Byte(1) {1, 0}
Dim i As Integer 'Compteurs de boucle Dim k As Byte Dim i2 As Integer Dim iMax As Integer Dim iMin As Integer Dim Donnee As Byte 'Donnée courante lis dans le fichier.
Dim iIndexDon As Integer 'Position courante de lecture dans la liste de données.
Dim iIndexDonMax As Integer 'Indice du maximum de données contenu dans IndexDonnees.
Dim ValeurIB1 As Byte 'Valeur de l'index binaire 'Variables qui servent le mécanisme principale de décompression Dim ValeurIS1 As Byte 'Valeur de l'index segment Dim ValeurIS2 As Byte 'Valeur de l'index segment Dim ValeurIS3 As Byte 'Valeur de l'index segment Dim ValeurIS4Pos As Byte 'Valeur unifier des bit de l'index segment : 4 possibilités Dim ValeurVal4Pos As Byte 'Valeur unifier de 2 valeurs : 4 possibilités Dim DebutBin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUnite As Byte 'Indique si la prochaine unité doit tenir compte d'une suite Dim DebutBinFin As Byte 'Indique la valeur de l'ensemble précédant, soit 0 ou 1 Dim ProchainUniteFin As Byte 'Indique si la prochaine unité doit tenir compte d'une suite 'Pour diminuer le nombre de traitements : le premier et le deuxième indique la valeur à
'sauvegarder dans la cible d'index segment, et le troisième est pour ProchainUnite Dim PremierChoix(,) As Byte = New Byte(3, 2) {{1, 0, 1}, {0, 0, 0}, {1, 1, 0}, {0, 1, 111 'Les 2 premiers ont pour la cible d'index segment et les 2 autres représente DebutBin et 'ProchainUnite.
Dim DeuxiemeChoix(õ) As Byte = New Byte(7, 1, 3) {
{{D, 0, 0, 01, {1, 0, 0, 111, {{0, 0, 0, 0}, {0, 0, 0, 011, Tous droits réservés, Mathias Robert-Thomas 19 Doc# MAT-0003-v295-FR
HO, 0, 0, 01, {1, 1, 1, 0}}, HO, 0, 0, 0), {0, 1, 1, 1}1, {{1, 1, 1, 0}, {0, 0, 0, 0}1, HO, 1, 1, 1), {0, 0, 0, 0}1, {{1, 0, 0, 1}, {0, 0, 0, 011, HO, 0, 0, 01, {0, 0, 0, OH}
Dim LongueurSegment As Byte Dim IndexSegment(,) As Byte = New Byte(1, 5) {}
Dim iIndexSeg() As Byte - New Byte(1) {0, 0}
Dim iCourantIS As Byte - 0 Dim iSuivantIS As Byte = 1 Dim ListeAjoutBit(õ) As Byte = New Byte(3, 3, 3) {
{{1, 1, 0, 0}, {1, 1, 0, 1}, {1, 0, 1, 1}, {1, 0, 1, 0}1, HO, 0, 0, 1), {0, 1, 0, 1}, {0, 0, 0, 0}, {0, 1, 0, 0}1, {{O, 0, 0, 01, {0, 0, 0, 1}, {0, 1, 1, 1}, {0, 1, 1, 0}}, {{1, 0, 1, 11, {1, 1, 1, 1}, {1, 0, 1, 0}, {1, 1, 1, 0}11 'Enlever les espace du nom de fichier NomFichierADecomp = Trim(EdFichierADecompresser.Text) DossierFichierACreer = Trim(EdDossierCibleDecomp.Text) LongueurNomFichier = Len(NomFichierADecomp) 'Initialiser les variables iNomDot LongueurNomFichier - 1 BackslashTrouve = False DotTrouve = False NomFichierADecompErreur = False '*** Implementation - Vérifier le nom du fichier à décompresser ***
'Lire l'extension du nom de fichier à décompresser While (((iNomDot > 0) And (Not BackslashTrouve)) And (Not DotTrouve)) If NomFichierADecomp.Chars(iNomDot) = "." Then DotTrouve = True Else If NomFichierADecomp.Chars(iNomDot) = "\" Then 'A ce point ci, le fichier à décompresser n'a pas d'extension BackslashTrouve = True iNomBackslash = iNomDot End If End If iNomDot = iNomDot - 1 End While 'Lire le restant du texte du nom de fichier à décompresser If DotTrouve Then iNomBackslash = iNomDot 'Essayer de trouver le caractère backslash While ((iNomBackslash > 0) And (Not BackslashTrouve)) If NomFichierADecomp.Chars(iNomBackslash) = "\" Then BackslashTrouve = True End If iNomBackslash = iNomBackslash - 1 End While If Not BackslashTrouve Then 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
'décompresser.
NomFichierADecompErreur True End If El se = If Not BackslashTrouve Then 'Une erreur a été trouvé dans le nom de fichier et le dossier du fichier à
'décompresser.
NomFichierADecompErreur = True End If End If (D Tous droits réservés, Mathias Robert-Thomas Doc# MAT-0003-v295-FR
'Vérifier si une erreur a été trouvé dans le nom de fichier et le dossier du fichier à décompresser If Not NomFichierADecompErreur Then '*** Implementation - Commencer la décompression ***
.***************************************************
'Modifier le text du label de statut LbStatutMontre2.Text = "En cours..."
LbStatutMontre2.Refresh() 'Désactiver le contrôle à onglet TabControlel.Enabled = False ReDim ZipInfo.Index(1343) 'Ouvrir le fichier en mode binaire FileOpen(1, Trim(EdFichierADecompresser.Text), OpenMode.Binary) FileGet(1, ZipInfo, 1) 'Fermer le fichier à décompresser FileClose(1) NomFichierACreer = Trim(EdDossierCibleDecomp.Text) + ZipInfo.NomFichier 'Créer le fichier à recréer FichierACreer = System.IO.File.Create(NomFichierACreer) FichierACreer.Close() 'Ouvrir le fichier à recréer en mode binaire FileOpen(2, NomFichierACreer, OpenMode.Binary) i2 = 0 'Initialiser le tableau de valeurs avec l'index For i = 0 To 1343 For k = 0 To 7 IndexBinaire(0, i2) = DataFragmentB2(ZipInfo.Index(i), k) i2 = i2 + 1 Next Next iindexBinMax(iCourantIB) = ZipInfo.Fin '*** Tant qu'il y a des données à décompresser balayer. ***
'*** Ceci est la boucle centrale du processus de décompression. ***
,******************************************************************
For iIterations - 1 To ZipInfo.NbrIterations 'Initialiser les variables iIndexBin(iCourantIB) - 0 iIndexBin(iSuivantIB) = 0 'Balayer par groupe de 7 bits For i = 0 To 1074 For k = 0 To 5 IndexSegment(iCourantIS, k) = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) iIndexBin(iCourantIB) + 1 Next ProchainUniteFin = IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 'Enlever 3 fois 2 binaire au segment For i2 = 2 To 0 Step -1 'Réinitialiser iIndexSeg au début Tous droits réservés, Mathias Robert-Thomas 21 Doc# MAT-0003-v295-FR
iIndexSeg(iCourantIS) = 0 iIndexSeg(iSuivantIS) = 2 'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) 'Unir les binaires sur 4 possibilités ValeurIS4Pos = TransB2aBlODemi(0, 0, ValeurIS1, ValeurIS2) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 DebutBin = ValeurIS1 ProchainUnite = PremierChoix(ValeurIS4Pos, 2) IndexSegment(iSuivantIS, 0) = PremierChoix(ValeurIS4Pos, 0) IndexSegment(iSuivantIS, 1) = PremierChoix(Va1eurIS4Pos, 1) LongueurSegment - (2 + ((i2 + 1) * 2)) - (i2 + 1) k = 1 While (k < LongueurSegment) If ProchainUnite = 1 Then 'Gérer la suite des termes 101, 1001, ou 1000 'Gérer la suite des termes 010, 0110, ou 0111 While (ProchainUnite = 1) And (k < LongueurSegment) 'Lire l'index source ValeurIB1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 If DebutBin = 0 Then If ValeurIB1 = 1 Then ProchainUnite = 0 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS) - 1) = 1 Else IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 0 iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 End If Else If ValeurIB1 = 0 Then ProchainUnite = 0 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS) - 1) - 0 Else IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = 1 iIndexSeg(iSuivantIS) iIndexSeg(iSuivantIS) +
End If End If k= k+ 1 End While If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 Else k = k + 2 =
'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) If k > LongueurSegment Then ValeurIS3 = 0 Tous droits réservés, Mathias Robert-Thomas 22 Doc# MAT-0003-v295-FR
Else ValeurIS3 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 2) End If 'Unir les binaires sur 4 possibilités ValeurIS8Pos = TransB2aB1ODemi(0, ValeurIS1, ValeurIS2, ValeurIS3) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 2) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 3) End If Else k= k + 2 'Lire l'index segment ValeurIS1 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) ValeurIS2 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 1) If k > LongueurSegment Then ValeurIS3 = 0 Else ValeurIS3 = IndexSegment(iCourantIS, iIndexSeg(iCourantIS) + 2) End If 'Unir les binaires sur 4 possibilités ValeurIS8Pos = TransB2a810Demi(0, ValeurIS1, ValeurIS2, ValeurIS3) iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 2 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) DeuxiemeChoix(ValeurIB4Pos, DebutBin, 0) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 1) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 'Indiquer avec quoi nous commençons : 0 ou 1 DebutBin = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 2) 'Indiquer si le prochain est pas une unité (une suite) ProchainUnite = DeuxiemeChoix(ValeurIB4Pos, DebutBin, 3) If k = LongueurSegment Then IndexSegment(iSuivantIS, iIndexSeg(iSuivantIS)) =
IndexSegment(iCourantIS, iIndexSeg(iCourantIS)) iIndexSeg(iSuivantIS) = iIndexSeg(iSuivantIS) + 1 iIndexSeg(iCourantIS) = iIndexSeg(iCourantIS) + 1 End If End If If k >= LongueurSegment Then 'Tenir compte de ProchainUniteFin et affecter sa nouvelle valeur End If End While 'Inverser l'indice courant et l'indice suivant pour le segment iCourantIS = ChangerIndexBin(iCourantIS) iSuivantIS = ChangerIndexBin(iSuivantIS) Tous droits réservés, Mathias Robert-Thomas 23 Doc# MAT-0003-v295-FR
Next Next 'Compléter l'index cible iMin = iIndexBin(iSuivantIB) For i = iMin To 10751 IndexBinaire(iSuivantIB, i) =
IndexBinaire(iCourantIB, iIndexBin(iCourantIB)) iIndexBin(iCourantIB) = iIndexBin(iCourantIB) + 1 Next iMax = iIndexBinMax(iCourantIB) - 1 'Transférer les données de l'index source vers IndexDonnees For i = iMax To iIndexBin(iCourantIB) Step -1 IndexDonnees(iIndexDonMax) = IndexBinaire(iCourantIB, i) iIndexDonMax = iIndexDonMax + 1 Next 'Enregistrer les données dans le fichier While iIndexDon < (iIndexDonMax - 7) Donnee = TransB2aBl0Complet(TransB2aBl0Demi32(0, IndexDonnees(iIndexDon), IndexDonnees(iIndexDon + 1), _ IndexDonnees(iIndexDon + 2), _ IndexDonnees(iIndexDon + 3)), TransB2aBl0Demi(IndexDonnees(iIndexDon + 4), _ IndexDonnees(iIndexDon + 5), _ IndexDonnees(iIndexDon + 6), _ IndexDonnees(iIndexDon, + 7))) iIndexDon = iIndexDon + 8 FilePut(2, Donnee) End While 'Ajuster le tableau de données lu dans l'index en déplaçant les données à la position 'de départ du tableau.
iMax = (iIndexDonMax - iIndexDon) - 1 For i = 0 To iMax IndexDonnees(i) = IndexDonnees(iIndexDon) iIndexDon = iIndexDon + 1 Next iIndexDon = 0 iIndexDonMax = iMax + 1 'Enregistrer l'indice maximum pour les autres itérations que la première iIndexBinMax(iSuivantIB) = 10752 'Changer l'indice courant et l'indice suivant iCourantIB = ChangerIndexBin(iCourantIB) iSuivantIB = ChangerIndexBin(iSuivantIB) BarreProgression2.Value = (iIterations / ZipInfo.NbrIterations) * 100 Next 'Fin de la boucle principale 'Fermer le fichier à recréer FileClose(2) 'Modifier le texte du label statut LbStatutMontre2.Text - "Complété!"
LbStatutMontre2.Refresh() 'Réactiver le contrôle à onglet Tous droits réservés, Mathias Robert-Thomas 24 Doc# MAT-0003-v295-FR
TabControlel.Enabled = True BarreProgression2.Value = 0 Else 'Modifier le texte du label statut LbStatutMontre.Text = "Erreur"
LbStatutMontre.Refresh() End If 'if Not NomFichierACompErreur End Sub Tous droits réservés, Mathias Robert-Thomas 25 Doc# MAT-0003-v295-FR
Concilavion Un prototype a été développé pour tester la vitesse. La compression est d'une vitesse satisfaisante. Même si le système n'a pas été testé en entier, nous pouvons évaluer que ça fonctionne. Un prototype complet sera développé prochainement.
La limite de données lus dans le fichier à chaque itération du processus est de 2688 binaires.
Merci à Sa Majesté la reine du Canada, Elizabeth Il, d'avoir permis le développement du Canada propice pour les inventeurs qui n'ont pas beaucoup de moyens financiers.
Merci à Eau, présente dans le Saint-Esprit, qui m'a conditionné fortement pour devenir un bon inventeur, c'est celle qui m'a fait grandir aussi pour que je devienne fort et instruit en m'envoyant des signes et des messages.
Merci à Jésus qui a fortifié le monde dans la droiture et qui a permis d'avoir des relations encourageantes avec les gens qui combattent le péché et qui favorise un environnement éduqué dans l'amour de Dieu.
Merci à Dieu qui a voyait que cette invention faisait partie de mon destin et qui m'a envoyé des signes et des messages à la fois encourageants.
Tous droits réservés, Mathias Robert-Thomas 28 Doc# MAT-0003-v295-FR
Gbssafire _ = = _....... = .....
ADN Acide désoxyribonucléique est une macromolécule biologique présente dans toutes les cellules ainsi que chez de nombreux virus. Est composé de
2 armatures (membranes) de phosphate désoxyribose et de mélange de bâtonnets (Adénine, thymine, guanine et cytosine) qui forment 4 codes.
Compression En anglais s'écrit aussi zip . Action de disposer les données de façon à
économiser de l'espace mémoire.
Compression ADN Méthode de double lecture en série et par bits ajoutés.
Donnée Valeur numérisée de nos jours.
Média Interface matériel par lequel nous pouvons y stocker des images, des bandes sonores, des vidéos et même des logiciels (ou appli, ou applications). Peut aussi être associé à une composante de stockage de fichiers divers.
Tous droits réservés, Mathias Robert-Thomas 29 Doc# MAT-0003-v295-FR
-. )', '-:,..., = ' ,' ".-.1.2 f4.
.11::"-=--,.,=-',' - k. . '--- '' ejeliri'll IR' "
gi rffii d Ei ;"`e:". I.'t - .>;=,',.-..' ' ''.'1'f) erkg!Lii; - 1 . = µ---'J-,12-t72 '------,---, ____________________________________________________ -___________________________________________________________ . -LZ> , = ===
__________ ".='-:-: . . <-.\ -.'''?*''' '''. F.77----:-''''''''''''' .:.' : . - . .4;9.'.--e.";., ,,,,-- ...;,.µ ... , õ,L, f',F''.''..= ;.. ,4`..,.,''..:.:...: s.,: - - ,,...---..,....',<)?......\<.1, , ,...,. ::.,,p,:4..;....--_,¨ L , . .: = ,.. : -...,L,_,,V.,...õ:.:.: :,:,, ,-... . - ,.
....õ ...... ....,/
:. . ..... -.. ..,. .. -:.:77'...'........>,.,...',1:, .
..,,,-____,..:-'<.,,,,..=':.,..';,..,.0-'75'.
' ' ' - -= - /.,P7.;1., :j.: L.'7,:`,,,.,,-,'"=;.%. -.
=,: :=. ...:õ..;r7:7-7.21, ';.,,../.11,i,t,. i.; ,,,.. :.:===,,-- "rjY,--s,:7':14...e ,....,:\I ''''' == ..
r" .',7''''' ''':=1' . . . . . --s----,--%,--.=
= ,. .-. = , ., ----4=1-::-..',\
'''. ===,... -- V,. :.li M ---:,(7,'-:7-7.'..b.:"7`' `,"7.77.Fi\,frili_ tri7 ..,!:.- .. .,. r---...--,.õ---ja.,õ ''i.r..: ....' õ,.(....,õ ,. ---","",:ra..-..-,...,',')>==%
t 7 '''''',..,.t.:- = i' ,,',`..,..;:::=--..'; ---: =!?:1=,'.1 = :,''. '..:.',:el , ,= . =,Ii.....1. tµ..,. ': '' µ.-;',.'7.=;-'-'' i,..fr 1'.7- 7 .7 )7 \ = ,i'.::::, =i = .-': r4';':;:i.r.':¨ .---['it=
É., 1.,,:=': = 4:'',4-e:;==.' .< -,!7:,,',:",-.,.:,= .. . ,..;=',,,1,-,-;','= ........_.j.,4,-,, . .,'J.1-. 1 1.1=":4-rv t-ii.= '-1.2.. i,L 1.-,\..- 77e:. . :=yeit.f- , ,77777.7.76 r- t..,..,.,. :=:'=-: 57--- ' - -.;,,..;....... ...
..:'..e r =::::::,,,%.=.:K. .,,..,,k,.3,,,,..õ....e.,à..õ,L, , i ,µ,,,.....-.
. v; -,,-,,...- ,,,-,:-..,,.= -- :-.=:,4-'j ,,...'..-:-..:'el ,='-:=='. - -;....--..,...:;.,_,:. ,-::.7õ,,,=,:,,,,;) t = '-''."-.,,*.k,-.---1. - --'-i.->eõ-:,7.-7::- . = v.;=--,....,,kç:u:-..,,,. r L.44=4,:..14..:4,>--:._\1-,.,...".'..:_.L-,.-õS.,-..,-':',,.... ......':.,.-,=,-.=',--=-=,::-:",,,' 1.,=:, =:=,-e.,: =
- --"z','-'..,:r;f.'îl..:1-f- .--:'''..õ;-,-,--,,:,=:,-.,'-'',---...7,.,: -r-\ . = = = ''., /--e ,.. .:-7 --.,..),:- .. ....,,.:
= . ":::::i,-,,,,:::71 ==_=.
.... , .:,,=.õ,. :_. -..:,....:;:.=,;; ,......ia --e, ->. =
7,.;,),i('I- -Partîsan de Ognfluence Per0e du patriirn*Ine du Canada des Nat0ons Unles .N......s.,... \. i i /e. --' e,,,= - /-e.7.:,'", 1 -7, -77 ,.''.:-., ., ..-'=
,.... ,,µ",,-1=;;;er... ., ,,....-:' ======'.;;'-' IL____ Sera publié le 1" février 2020 par : ,L ; '. . ..= .' ''µ
- . "---7 .---. - . - ,e,--,=-,>. 11, ,,,, ,= ------=-=,:,--..,...:. :-.4õ.. -:
-Mathias Robert-Thomas -..._4- -:2_ :::::,...]4-';:::.......:*....,....,/,,-..=:!.-- -,,,_:õ.==-=-=-J,.õ-=-."..----:-,---.- .,;.-;.:-.-...::.;,,.--õ:::---.1--- -, ui:-..,...-.. .4e,,, -. : ,-:,- ,- ,-=,.,.., .,-:===,=õ-:µ::.,.....,..--i--..,:..-y, :.:".i-"1--i-,,,--:;:.;...:. _ jf.1L-.-, -' t-2"..,,,,,,-,,,,,-J,".= ,.:,.:,.,\...=.,-_,..,,..:=-,--;....::.,-.,,g,::::..-ei:
Montréal (Québec) :
.:....;.'.:r..=':,,...''',,....-,¨.7,.. ."\-. J,rit.,, - '-',,,.,,- ,,,:
':',-,-.õ- --,--,...:!-.õ,...:,...:.,:=:-.....',.;.:, ,=== :======;i:7.,;.',.:,:..:i...-_-.,,,-.- - ',..,4---,.; ",-,=,.-.ev., - i,.=.;:.-= / - '-' - ' . ,',.i=
Canada 4i";:: ::,'"7"=; r r-'=:. .-'''=,-. =". .."'' \-.. ,,..z-.."/;\'' . '.--, i I
. .1.' = \ it;. . -''s Fatit au Québec
Compression En anglais s'écrit aussi zip . Action de disposer les données de façon à
économiser de l'espace mémoire.
Compression ADN Méthode de double lecture en série et par bits ajoutés.
Donnée Valeur numérisée de nos jours.
Média Interface matériel par lequel nous pouvons y stocker des images, des bandes sonores, des vidéos et même des logiciels (ou appli, ou applications). Peut aussi être associé à une composante de stockage de fichiers divers.
Tous droits réservés, Mathias Robert-Thomas 29 Doc# MAT-0003-v295-FR
-. )', '-:,..., = ' ,' ".-.1.2 f4.
.11::"-=--,.,=-',' - k. . '--- '' ejeliri'll IR' "
gi rffii d Ei ;"`e:". I.'t - .>;=,',.-..' ' ''.'1'f) erkg!Lii; - 1 . = µ---'J-,12-t72 '------,---, ____________________________________________________ -___________________________________________________________ . -LZ> , = ===
__________ ".='-:-: . . <-.\ -.'''?*''' '''. F.77----:-''''''''''''' .:.' : . - . .4;9.'.--e.";., ,,,,-- ...;,.µ ... , õ,L, f',F''.''..= ;.. ,4`..,.,''..:.:...: s.,: - - ,,...---..,....',<)?......\<.1, , ,...,. ::.,,p,:4..;....--_,¨ L , . .: = ,.. : -...,L,_,,V.,...õ:.:.: :,:,, ,-... . - ,.
....õ ...... ....,/
:. . ..... -.. ..,. .. -:.:77'...'........>,.,...',1:, .
..,,,-____,..:-'<.,,,,..=':.,..';,..,.0-'75'.
' ' ' - -= - /.,P7.;1., :j.: L.'7,:`,,,.,,-,'"=;.%. -.
=,: :=. ...:õ..;r7:7-7.21, ';.,,../.11,i,t,. i.; ,,,.. :.:===,,-- "rjY,--s,:7':14...e ,....,:\I ''''' == ..
r" .',7''''' ''':=1' . . . . . --s----,--%,--.=
= ,. .-. = , ., ----4=1-::-..',\
'''. ===,... -- V,. :.li M ---:,(7,'-:7-7.'..b.:"7`' `,"7.77.Fi\,frili_ tri7 ..,!:.- .. .,. r---...--,.õ---ja.,õ ''i.r..: ....' õ,.(....,õ ,. ---","",:ra..-..-,...,',')>==%
t 7 '''''',..,.t.:- = i' ,,',`..,..;:::=--..'; ---: =!?:1=,'.1 = :,''. '..:.',:el , ,= . =,Ii.....1. tµ..,. ': '' µ.-;',.'7.=;-'-'' i,..fr 1'.7- 7 .7 )7 \ = ,i'.::::, =i = .-': r4';':;:i.r.':¨ .---['it=
É., 1.,,:=': = 4:'',4-e:;==.' .< -,!7:,,',:",-.,.:,= .. . ,..;=',,,1,-,-;','= ........_.j.,4,-,, . .,'J.1-. 1 1.1=":4-rv t-ii.= '-1.2.. i,L 1.-,\..- 77e:. . :=yeit.f- , ,77777.7.76 r- t..,..,.,. :=:'=-: 57--- ' - -.;,,..;....... ...
..:'..e r =::::::,,,%.=.:K. .,,..,,k,.3,,,,..õ....e.,à..õ,L, , i ,µ,,,.....-.
. v; -,,-,,...- ,,,-,:-..,,.= -- :-.=:,4-'j ,,...'..-:-..:'el ,='-:=='. - -;....--..,...:;.,_,:. ,-::.7õ,,,=,:,,,,;) t = '-''."-.,,*.k,-.---1. - --'-i.->eõ-:,7.-7::- . = v.;=--,....,,kç:u:-..,,,. r L.44=4,:..14..:4,>--:._\1-,.,...".'..:_.L-,.-õS.,-..,-':',,.... ......':.,.-,=,-.=',--=-=,::-:",,,' 1.,=:, =:=,-e.,: =
- --"z','-'..,:r;f.'îl..:1-f- .--:'''..õ;-,-,--,,:,=:,-.,'-'',---...7,.,: -r-\ . = = = ''., /--e ,.. .:-7 --.,..),:- .. ....,,.:
= . ":::::i,-,,,,:::71 ==_=.
.... , .:,,=.õ,. :_. -..:,....:;:.=,;; ,......ia --e, ->. =
7,.;,),i('I- -Partîsan de Ognfluence Per0e du patriirn*Ine du Canada des Nat0ons Unles .N......s.,... \. i i /e. --' e,,,= - /-e.7.:,'", 1 -7, -77 ,.''.:-., ., ..-'=
,.... ,,µ",,-1=;;;er... ., ,,....-:' ======'.;;'-' IL____ Sera publié le 1" février 2020 par : ,L ; '. . ..= .' ''µ
- . "---7 .---. - . - ,e,--,=-,>. 11, ,,,, ,= ------=-=,:,--..,...:. :-.4õ.. -:
-Mathias Robert-Thomas -..._4- -:2_ :::::,...]4-';:::.......:*....,....,/,,-..=:!.-- -,,,_:õ.==-=-=-J,.õ-=-."..----:-,---.- .,;.-;.:-.-...::.;,,.--õ:::---.1--- -, ui:-..,...-.. .4e,,, -. : ,-:,- ,- ,-=,.,.., .,-:===,=õ-:µ::.,.....,..--i--..,:..-y, :.:".i-"1--i-,,,--:;:.;...:. _ jf.1L-.-, -' t-2"..,,,,,,-,,,,,-J,".= ,.:,.:,.,\...=.,-_,..,,..:=-,--;....::.,-.,,g,::::..-ei:
Montréal (Québec) :
.:....;.'.:r..=':,,...''',,....-,¨.7,.. ."\-. J,rit.,, - '-',,,.,,- ,,,:
':',-,-.õ- --,--,...:!-.õ,...:,...:.,:=:-.....',.;.:, ,=== :======;i:7.,;.',.:,:..:i...-_-.,,,-.- - ',..,4---,.; ",-,=,.-.ev., - i,.=.;:.-= / - '-' - ' . ,',.i=
Canada 4i";:: ::,'"7"=; r r-'=:. .-'''=,-. =". .."'' \-.. ,,..z-.."/;\'' . '.--, i I
. .1.' = \ it;. . -''s Fatit au Québec
3 n P4 ..µ fc .
C/. , lç µ . ' ' . . .
e , .,-..,,,,=..,: ...,:=., J...,,::,,..._,,, ...,=== ,..õ..õ ,:,,,,,,,.=:..:=., . .õ...,..,.....õ...,..,.=_õ.=., =,=
=
C/. , lç µ . ' ' . . .
e , .,-..,,,,=..,: ...,:=., J...,,::,,..._,,, ...,=== ,..õ..õ ,:,,,,,,,.=:..:=., . .õ...,..,.....õ...,..,.=_õ.=., =,=
=
4'r f..E-::::....-......,= .... ..,.:.,,,, ........:...õ,..
..... i.:,..õ.-......,....,,µ,.. ,, .=,........ _.._¨_-_-- = = = == ..
* : -..õ-.- .. .::::=:=... ...5.,,,,,,.:. _.,:==.=,: : 7 ; -:>-''...- .:::`'..s=;;;;erifi ,'''.-, ..." - " * .' '..'':'''''' \ /- '':=M',' -: ; , ,.:--::;,,,,M;:4-,e.à,....' : = =....,,w :Cze. -',7..':i,-:,. .:': , -,Pe.õ-",-,B,.7,=:--Z.."--z,.. = tt .:" -,:, .
'..'!:...õ-';',,e,=,- : = . ...,..
== = == ..===:...,,-.-, .. ',i.,.' ...gre,õ :,..-=õ,õ=:-.7=-...-õ,:,..=.r..:::7:::':. :\, =fr,Ier..e.:-. -, .:..,. - .
Origil(% =
Am l des Ét noats-Us Tous droits réservés, Mathias Robert-Thomas 30 Doctt MAT-0003-v295-FR
Annexe 1 La base de données ADN
Les pages qui suivent sont une présentation de la base de données ADN qui est liée à l'invention de compression ADN.
Tous droits réservés, Mathias Robert-Thomas Looir4 rio ow RESTRICTED f.C5ESS ONI
=
9 0, -,,La Base de Données ADN 7 c Auteur: Mathias Robert-Thomas :: Mise à jour: 29-10-2019 '4411e .11 Tous droits réservés:: Doc# SSW-MAT-0006-v2-FR
Introduction = La base de données ADN est un concept de stockage de valeurs sur une grande échelle. Par exemple, si nous voulons vérifier si un accès _ d'une adresse IP spécifique est autorisé et que nous ayons beaucoup il C
d'adressé IP à comparer, cela est très efficace d'utiliser la base de données hiérarchique. Car nous utiliserons la compression ADN pour 41%
créer une structure d'accès rapide à une ou des valeurs stockés sans -utiliser beaucoup d'espace. Si nous utilisons un index de 120 bits, -alors l'accès se fera plus rapidement qu'un index de 10 000 bits.
t, Fonctionnement _ PFSTP-ED v = Si nous utilisons 2 possibilités à la fois, ça sera plus rapide que 16 possibilités ou plus par exemple. Car pour chaque bit d'adresse nous r utilisons un accès optimale qui ne fait que doubler chaque bit de l'adresse. C'est-à-dire que pour accéder à une valeur avec une adresse de 32 bits, nous n'aurons qu'à lire 32 niveau de 120 bits d'index chacun.
Fonctionnement --PSfP CC.ESS Y
= L'accès aux valeurs est donc hiérarchique avec la base de données ADN.
- = Par contre un changement nécessite que l'on recompresse seulement l'accès à la valeur changée. Mais un index de 120 bits c'est très rapide, même pour une adresse de 32 bits. Par exemple, cela prendrait en 'g - moyenne un traitement de 66 000 bits environs (32 x 8 x 120 =
30720 bits = 3,75 kilo-octets), et c'est très rapide, ça prend une fraction de seconde à un ordinateur pour accéder aux valeurs et les modifier.
Figure 2 ¨ Base de données ADN
v = Supposons que l'adresse binaire que nous voulons accéder est 10 .
Index initial.décoMpressé I dex() Index 1 'tµ
Index 1 décompressé Index 0 I dex 4, Index 0 décompressés = Valeurs accédées =
..... i.:,..õ.-......,....,,µ,.. ,, .=,........ _.._¨_-_-- = = = == ..
* : -..õ-.- .. .::::=:=... ...5.,,,,,,.:. _.,:==.=,: : 7 ; -:>-''...- .:::`'..s=;;;;erifi ,'''.-, ..." - " * .' '..'':'''''' \ /- '':=M',' -: ; , ,.:--::;,,,,M;:4-,e.à,....' : = =....,,w :Cze. -',7..':i,-:,. .:': , -,Pe.õ-",-,B,.7,=:--Z.."--z,.. = tt .:" -,:, .
'..'!:...õ-';',,e,=,- : = . ...,..
== = == ..===:...,,-.-, .. ',i.,.' ...gre,õ :,..-=õ,õ=:-.7=-...-õ,:,..=.r..:::7:::':. :\, =fr,Ier..e.:-. -, .:..,. - .
Origil(% =
Am l des Ét noats-Us Tous droits réservés, Mathias Robert-Thomas 30 Doctt MAT-0003-v295-FR
Annexe 1 La base de données ADN
Les pages qui suivent sont une présentation de la base de données ADN qui est liée à l'invention de compression ADN.
Tous droits réservés, Mathias Robert-Thomas Looir4 rio ow RESTRICTED f.C5ESS ONI
=
9 0, -,,La Base de Données ADN 7 c Auteur: Mathias Robert-Thomas :: Mise à jour: 29-10-2019 '4411e .11 Tous droits réservés:: Doc# SSW-MAT-0006-v2-FR
Introduction = La base de données ADN est un concept de stockage de valeurs sur une grande échelle. Par exemple, si nous voulons vérifier si un accès _ d'une adresse IP spécifique est autorisé et que nous ayons beaucoup il C
d'adressé IP à comparer, cela est très efficace d'utiliser la base de données hiérarchique. Car nous utiliserons la compression ADN pour 41%
créer une structure d'accès rapide à une ou des valeurs stockés sans -utiliser beaucoup d'espace. Si nous utilisons un index de 120 bits, -alors l'accès se fera plus rapidement qu'un index de 10 000 bits.
t, Fonctionnement _ PFSTP-ED v = Si nous utilisons 2 possibilités à la fois, ça sera plus rapide que 16 possibilités ou plus par exemple. Car pour chaque bit d'adresse nous r utilisons un accès optimale qui ne fait que doubler chaque bit de l'adresse. C'est-à-dire que pour accéder à une valeur avec une adresse de 32 bits, nous n'aurons qu'à lire 32 niveau de 120 bits d'index chacun.
Fonctionnement --PSfP CC.ESS Y
= L'accès aux valeurs est donc hiérarchique avec la base de données ADN.
- = Par contre un changement nécessite que l'on recompresse seulement l'accès à la valeur changée. Mais un index de 120 bits c'est très rapide, même pour une adresse de 32 bits. Par exemple, cela prendrait en 'g - moyenne un traitement de 66 000 bits environs (32 x 8 x 120 =
30720 bits = 3,75 kilo-octets), et c'est très rapide, ça prend une fraction de seconde à un ordinateur pour accéder aux valeurs et les modifier.
Figure 2 ¨ Base de données ADN
v = Supposons que l'adresse binaire que nous voulons accéder est 10 .
Index initial.décoMpressé I dex() Index 1 'tµ
Index 1 décompressé Index 0 I dex 4, Index 0 décompressés = Valeurs accédées =
5 _ Nouvelle sécurité
Pu ^" tsrt nw r. ST re `õESS :==
= õ
= Avec l'invention de la base de données ADN nous pouvons déterminer qui peut accéder à une interface par exemple. Ou bien nous pouvons aussi déterminer combien de fois une adresse IP ou un réseau d'adresse IP t.
cliquent sur nos publicités, ce qui prévient la fraude à cause de la détection ==; c=
des fraudeurs qui embauchent des pirates informatique avec le bit coin ou =
autres méthodes de paiements.
- = De plus, une simple base de données ADN associé à une carte de crédit permet au détenteur de choisir d'avance tous les commerces ou les zones =
de commerces qu'il désire utiliser sa carte de crédit. La même chose pour les sites web. Donc à chaque transaction, le système déterminerait si cette carte de crédit autorise tel site web, tel commerce ou telle zone. Adieu les fraudeur.
Pu ^" tsrt nw r. ST re `õESS :==
= õ
= Avec l'invention de la base de données ADN nous pouvons déterminer qui peut accéder à une interface par exemple. Ou bien nous pouvons aussi déterminer combien de fois une adresse IP ou un réseau d'adresse IP t.
cliquent sur nos publicités, ce qui prévient la fraude à cause de la détection ==; c=
des fraudeurs qui embauchent des pirates informatique avec le bit coin ou =
autres méthodes de paiements.
- = De plus, une simple base de données ADN associé à une carte de crédit permet au détenteur de choisir d'avance tous les commerces ou les zones =
de commerces qu'il désire utiliser sa carte de crédit. La même chose pour les sites web. Donc à chaque transaction, le système déterminerait si cette carte de crédit autorise tel site web, tel commerce ou telle zone. Adieu les fraudeur.
6 Nouvelle sécurité (suite) , = Un firewall ou la carte réseau pourrait aussi utiliser la base de données ADN pour allouer des sites par leur adresse IP et bloquer toutes les autres tentatives d'accès ou d'envoie de données à l'ordinateur ou au serveur. Adieu les pirates informatiques.
= Même l'accès à Google Map pourrait être fait à partir de la base de données ADN et limiter le stockage de donnees inutilement (entrepôts de données). Les coordonnées 7 géographique formerait l'adresse d'accès à la base données ADN et permettrait même de .0 former une sécurité supplémentaire qu'en à l'accès par coordonnées GPS d'un appareil à
un autre appareil. La coordonnée serait validé par un jeton qui est un code qui autorise:
cette coordonnée géographique et l'appareil securise en question validerait le jeton. Si le jeton est erroné, l'appareil distant ne contient pas la liste ides jetons valides par coordonnées, et et se ferait bloquer l'accès.
= Notez qu'il est facile de créer et mettre à jour une liste de jeton, juste en créant un index de 120 bits aléatoire par exemple. Par mesure de sécurité extrême, nous pouvons créer un index aléatoire de 1 millions de bit par exemple, et continuer avec des 120 bits pour le reste de l'adresse.
= Même l'accès à Google Map pourrait être fait à partir de la base de données ADN et limiter le stockage de donnees inutilement (entrepôts de données). Les coordonnées 7 géographique formerait l'adresse d'accès à la base données ADN et permettrait même de .0 former une sécurité supplémentaire qu'en à l'accès par coordonnées GPS d'un appareil à
un autre appareil. La coordonnée serait validé par un jeton qui est un code qui autorise:
cette coordonnée géographique et l'appareil securise en question validerait le jeton. Si le jeton est erroné, l'appareil distant ne contient pas la liste ides jetons valides par coordonnées, et et se ferait bloquer l'accès.
= Notez qu'il est facile de créer et mettre à jour une liste de jeton, juste en créant un index de 120 bits aléatoire par exemple. Par mesure de sécurité extrême, nous pouvons créer un index aléatoire de 1 millions de bit par exemple, et continuer avec des 120 bits pour le reste de l'adresse.
7 Marginalité de Mathias = ...
, RFSTPrTLD AC USS
^ est sur que le statut de mon entreprise (leader en technologie), et mon géiiie;en mettant les pirates informatiques au chômage, cela provoquerait une pluie de tentatives d'attaques de mon site Web, T.: mais ce site est blindé aussi, il ne manque plus qu'à louer ou acheter A des infrastructures physiques qui puissent supporter des pluies õ, d'attaques. Ce n'est pas que je suis marginal en réalité, c'est - l'incrédulité des pirates informatiques qui font que mon entreprise ne, 1.4 soit pas comprise à son meilleur, mais cette réaction sera temporaire; lelj En réalité, Mathias n'est pas une coche au dessus de marginal ou marginal, c'est une entreprise qui encourage la liberté et lutte contre le mal. Tout ceux qui attaqueront Mathias, en réalité ceux-là
encourage le mal.
, RFSTPrTLD AC USS
^ est sur que le statut de mon entreprise (leader en technologie), et mon géiiie;en mettant les pirates informatiques au chômage, cela provoquerait une pluie de tentatives d'attaques de mon site Web, T.: mais ce site est blindé aussi, il ne manque plus qu'à louer ou acheter A des infrastructures physiques qui puissent supporter des pluies õ, d'attaques. Ce n'est pas que je suis marginal en réalité, c'est - l'incrédulité des pirates informatiques qui font que mon entreprise ne, 1.4 soit pas comprise à son meilleur, mais cette réaction sera temporaire; lelj En réalité, Mathias n'est pas une coche au dessus de marginal ou marginal, c'est une entreprise qui encourage la liberté et lutte contre le mal. Tout ceux qui attaqueront Mathias, en réalité ceux-là
encourage le mal.
8 Doc# MAT-0003-v295-FR
Annexe 2 La base de données 31) Les pages qui suivent sont une présentation de la base de données 3D qui est liée à l'invention de compression ADN.
Tous droits réservés, Mathias Robert-Thomas i I
I I
i .
) 1 ;
=-=.-1,;, =,,, ,... ,i; ;Ã ; I ,, , '',.1-i, ai..:'--ef.,.e.,M.. ' :
.' , ',.c. 1 I , Keell,;A. ,',,,;=,1 = ,i,!,; ; / 1 1=.(:ei 7,`,Likt;',.:`,4t1,1U 41,1';ç14;-. =
- ! ' ,?=r_ - '''=, I = , 1õ .`t.*.b ==-.:=.'. i'.,.',i : L': -.:,'2i'!:;1 ` - - .. - élr."..;,',i4 ! i.PI,=.:,i-.=!
??=;;===4t e 3 ',=,===C'='==-,,f; '' '''rj.,=;1 ', 't ?,';',-,..' ,.e;giezt",1,1.1ràge=tt-'`i ? ,/,=:.:::"=57..._____. __ j '.,;:i li.,y,,,,ii:',:,=,' `,.,-' ' -'''''''ç -' - ',',. 't='=:-._ . ,:e.. = ,,=4=.,:µ 1,===.;=;:==,=:' =
1 i '7 J,":==-=':':' =;;'-'µi=-.r.'= == ''''''' ' i' ' ig., , , %.,-,..y::1-:),,,',..;,,-. ;.,:: = - = =
1 ' '''''=,,,, sj= .. ';'2,-= '-',?;" i=lierilir-.2' 1 717 µ.7.- , iI s '':".:=;.:õ.. _ .: ,., ' rii.....:..çt'i;= ;;`,711.4-,i=[=,;', ,r:s....._....4' =!:' '=.c 1......' ' ' ' = ,='= 4;',..,.; '=" ' =é...====,=er.====A,.
I 'I = =I
; , 1 I ,=:: =
, --t_ _ I .
. , ____ 4..
, ___________________________________________________ _,..
, , .
,...,-4,,,,,..1,:=,1t;
' eltire ,`; , -=-=,,,;;; iel., t4 f = ...',,,',1õ7.:Y '.', ,.. ': :::=,'=,': .. -...
';',;.':ti,?;=:..'.r.'::''''=
- I 1 1 - y - = ,' , ' ,, ,- ', ='', , = , , - -I,' . :. .... .,' ,..= ,'-'.
:,===..;= =,,,,,,,,y, .-:-.2,. 1 I t :==-.,-:.:.''','=?. l''Y'.-=''S','=-',... ;
,I.," ' ','''',' ' ''''" ' I I , ( .',:i'',,e;li '::'=g;;;'(..2. ..-.t.,=,=`,,f'r ;_.'=
'.; ,....-'2õ
' 1 I --,'='-...ïe.':;,ek;::=''...,:=:,===== -=::::=''' iri=,"==7e,, .U.,,=:;-';_ t 1 ..i'el=t..?,;:e4;UV,'' .r=-,,,:,..,,,,e.pw.,,,, , ________ , .
= ., , .
, , .
, i Base de données 3D
Mise à jour : 29-10-2019 Écrit par Mathias Robert-Thomas Doc# PRG-0001-v1-FR
/524:.:1-02-FM\
. i. ...
_:.....
,..:..,-;"
'0/
J.
,., .
;. .. I
..., (..
. , \4::,:.'= 1i N.-.---;---.--' Doc# PRG-0001-vi-FR
Table des matières Introduction ............................................................. 2 Le fonctionnement actuel d'une base de données ........................... 2 La 3' dimension d'une base de données .................................... 3 Les autres atouts de la base de données 3D ............................... 4 Tous droits réservés, Mathias Robert-Thomas 1 Doc# PRG-0001-v1-FR
1. Introduction Les bases de données sont utilisées en informatique pour stocker des données de toutes sortes, à l'exception des larges volumes de données et certains formats de données qui ne sont pas compatibles avec les moteurs de gestion du système de bases de données.
Avec l'arrivée des bases de données 3D, le concept de base de données sera grandement modifié, car l'invention de compression de données qui a permis de faire naître les bases de données 3D
viendra affecté la conceptualisation, la gestion et l'utilisation que l'on peut faire d'une base de données.
La base de données 3D est un système qui répond à de multiples nouveaux besoins dans le monde de l'informatique. Ce système modifie l'utilisation que l'on peut faire d'un logiciel relié
à une base de données. Effectivement, de nouvelles portes s'offre quant à la capacité de stockage, à la sécurité, à l'accès à d'anciennes données, aux multiples liens dynamiques qui peuvent désormais être créés entre les données, une rapidité d'accès exaspéré, ainsi qu'aux tables de données à dimension 3D permettant la création d'une table incorporée dans des champs de données, en plus du typage dynamique des champs, l'implantation possible de hiérarchies pour une nouvelle forme de modélisation de données, ainsi qu'une réduction totale de l'espace occupé par les données de grande taille, etc.
La base de données 3D est dépendante de l'invention de la compression ADN
créée par le même auteur. Cette invention permet de réduire des données à un format spécifique prenant moins de 2 kilo-octet d'espace.
2. Le fonctionnement actuel d'une base de données Une base de données actuelle (non 3D) est un fichier contenant des tables de données.
Ces tables sont définies en largeur (les champs) et en longueur (les enregistrements) : voir la figure 1.
Figure 1¨Table de données dans une base de données NoSitoyen Prénom Nom Åge 1 George Jones 34 2 Matthew Whites 54 3 Harrison Ford 62 4 Catherine Armstrong 29 Tous droits réservés, Mathias Robert-Thomas 2 Doc# PRG-0001-v1-FR
Comme vous voyez à la figure 1, le nombre de champs par enregistrements est défini, et en plus, dans un système de base de données, l'espace occupé par un champ est aussi défini. Ce qui forme des blocs de données définis. Étant donné que les blocs de données sont précis, cela permet de faire des recherches accélérer en accédant systématiquement à la donnée désirée.
Ainsi les bases de données devront conserver cette structure pour continuer à
être rapides.
Étant donné que les bases de données actuelles contiennent des tables de longueur définie, alors il n'est pas possible de conserver d'anciennes données. Par exemple, si George (à la figure 1) était remplacé par Mark , alors George serait perdu, la table conservant seulement les nouvelles données dans la même structure de données.
3. La 3e dimension d'une base de données La 3e dimension est créée avec un bloc de données défini ajouté à des champs de données. Ce nouveau bloc de données défini est en fait un code de compression de données associé à l'invention de compression ADN . Nous pouvons aussi définir des codes de compression à chaque enregistrement. L'important, c'est de conserver une structure de données (champs et enregistrement) étant de longueur définie pour permettre une navigation rapide dans le fichier de base de données.
Le code de compression permet de sauvegarder les données effacées, ainsi à
chaque fois qu'une donnée est modifiée, elle est sauvegardée pour former un nouveau code de compression contenant la donnée modifiée et toutes les anciennes données modifiées en sauvegardant aussi l'ancien code de compression (voir la figure 2).
Figure 2 ¨ Système de sauvegarde perpétuelle des anciennes données Mark Code Comp: 101011010...
George Code Comp: 0011010110...
\if Robin Code Comp: 0000000000...
Tous droits réservés, Mathias Robert-Thomas 3 Doc# PRG-0001-v1-FR
4. Les autres atouts de la base de données 3D
- Les codes de compression peuvent contenir aussi le nom d'utilisateur qui a modifié la donnée.
- Nous pouvons créer un groupe de champ avec un code de compression, ce qui permet de lier plusieurs champs ensemble.
- Les données volumineuses peuvent être compressées (représenté par un code de compression), cela réduit largement le volume de la base de données. Nous pouvons aussi créer des structures de base de données appelées micro base de données>
contenant un large volume de données et prenant peu d'espace.
- Des alertes personnalisées peuvent être déclenchées s'il y avait modifications de données spécifiques.
- Intégration de l'accès à des données par mode hiérarchique, c'est-à-dire que des enregistrements peuvent être inclus l'une dans l'autre.
- En plus de l'enregistrement d'anciennes données, donnant naissance à un système anticorruption, nous pouvons aussi gérer les accès par enregistrement ou par données spécifiques. Ainsi, le niveau de sécurité de la base de données 3D est plus largement augmenté.
- La compression de données ADN permet d'inclure toutes formes de données dans un champ, tel que des listes de vidéos hautes résolutions, des listes d'images hautes résolutions, des listes de grands fichiers, des longs textes, des logiciels, des tableaux de données intégrés, etc. Nous pouvons donc ajouter ce que bon nous semble dans un champ. Des rapports plus complets peuvent être ainsi enregistrés contenant des vidéos, des images et des fichiers, ce qui forme des rapports hautement détaillés sauvegardés dans un seul champ de données.
- Des liens peuvent être créés vers d'autres données dans la base de données, et ce dynamiquement selon chaque donnée individuellement.
- La vitesse d'accès se trouve hautement améliorée, étant donné que les images, les vidéos et les fichiers sont des codes compressés qui remplacent les larges blocs de données non compressés.
Tous droits réservés, Mathias Robert-Thomas 4 Doc# MAT-0003-v295-FR
Annexe 3 =Vencryptage aux chaînons manquants Les pages qui suivent sont une présentation de l'encryptage aux chaînons manquants qui est liée à l'invention de compression ADN.
0 Tous droits réservés, Mathias Robert-Thomas ' y I
=
=
=
õEncryptage aux Chaulons I: Manquants , a .
õ
Auteur: Mathias R.-T. :: Mise à jour: 29-10-2019 :: Créé le-24-01-201Y, - 0 Tous droits réservés:: Doc# SSW-MAT-0005v2-FR
=
!
\
Historique de Ventryptage = 1939-1945: Les allemands inventent durant la seconde guerre mondiale un -encodage qui sera décrypté par les alliés -;à l'insu des Allemands:
--- = 1994: L'explosion d'Internet sur le monde 'amènera à repenser à
sécuriser les données. Même si c'est encodé, le simple fait de posséder l'algorithme d'encryptions permet de trouver rapidement la clé.
= 2019: L'arrivé de la compression ADN permettra de dissimuler; un éncryptage par Chaînons manquants, ce qui permet de multiplier une simple clé de 32 caractères à l'équivalenteune longueur dé clé de des milliards dé-CaraCtères, le tout rapidement et efficacément. L'avantage c'est que même si ont a l'algorithme, cela peut prendre une éternité a un , ordinateur à décoder une simple clé de 32 caradères.
;
I. t!.\
IntrodUction = L'encrypiage aux chaînons manquants pourrait fonctionner sans la compression ADN, sauf que sanS-laçompression ADN, nous Pouvons, ---- avoir une idée de la grosseur du nie4age. La compression ADN efface -toutes traces de la grosseur du message. En plus, d'un pattern 'de variation de la longueur de moins d'Un traitement (nous,Verrons plus loin), ce qui laisse aucune chance aux tentatives'de décryptage - - ¨dlântle"Stines-dtû mesag-_ = Nous aurions pu utiliser 1 seul chaînon manquant, mais Mathias recommande au moins 2.
-I --Le fonctionnerhent -= En utilisant Une compression de données modifié avec des dônnées -fictives qui complète le remplissage des itérations du processus de - compression, en appliquant un filtre sur 2 séquences (recommande au moins 2) durant la compression, nous encodons les ,données.
. _ = De plus, Mathias recommande de rrielangenletableiddef--µ-_____ dis_ponibilités des_caractères, en supposantqü'un pirate ou un espion ne trouvera pas ce d'ode, cela reriforcie la sécurité. Un exemple - ¨ d'encodage complet sera présenté en-ctérrio par Mathias via la classe TEncryption de son site web.
=-=
)1 / \*, , Le fonctionnement = En modifiant avec la clé d'encodage à partir dé 2'endrolts (chaînons manquants) dans le processus de compression, nous encodons aussi à
partir du point jusqu'à la fin des données utiles (ceux quisérvent à la, -reconstitution de l'index en décompressant) de l'index. Celi5ert assurer que les données qui suivent la décompression ne soit pas facilement identifiable. C'est une sécurité supplémentaire.
= Et évidement nous recompressons le message.
= Le nombre d'itérations du processus de compression peut être défini par une partie de la clé.
= La position des chaînons manquants est déterminé par une partie de la clé.
Il est préférable de ne pas utilisé ces parties de la clé lors de l'encodage.
1\ 5 Le fonctionnement = Il est préférable d'encoder l'index initial aussi avant le processus de compression et d'utiliser des données aléatoires pour l'index initial.
_ '= "
, I;
' , _ Figure 1 --,.Protessus de l'a compression ADN
Index initial _ Index initial compressé Do .ées Index et données A compressés Données f=3 = I .
t , Figure 2 ¨,,Encryptage aux Chaînons Manquant Index initial Index initial _ . .
Chaîrion-encrypté
IndexetrL.
^--:
Chaînonencrypte r I ' f =
/
1 L. , , La technique du jeton = Dans une; base de données, le processus pourrait encrypter le mot de passe - - --associé à un nom d'utilisateu.r. Lors d'une tentative de connexion, si avec la _ clé et le mot de passe nous ne retrou.i.ions,pàs le .'même mât sde basse, alors ---- -le processus pourrait invalider une connexion.
õ
= La même chose pour une transaction,' une car bancaire-p`oarai avoir un jeton (une donnée encrypti), lors d'un essaie de transaCiïdP; la banque --- - --renvoie-la'clé tempgrarre pour décqder te jeton. avec le-NIP de l'usager, site jeton est validé dans le compfe-de-rusager, la transaction s'effectue et le s. . , , systeme renvoie un nouveau jeton encribté dans ta carte bancaire Il ne --peut pas Y avoir 2 transactions avec le mênibleton avec la même carte 2 fois de suite si les jetons changent.
Annexe 2 La base de données 31) Les pages qui suivent sont une présentation de la base de données 3D qui est liée à l'invention de compression ADN.
Tous droits réservés, Mathias Robert-Thomas i I
I I
i .
) 1 ;
=-=.-1,;, =,,, ,... ,i; ;Ã ; I ,, , '',.1-i, ai..:'--ef.,.e.,M.. ' :
.' , ',.c. 1 I , Keell,;A. ,',,,;=,1 = ,i,!,; ; / 1 1=.(:ei 7,`,Likt;',.:`,4t1,1U 41,1';ç14;-. =
- ! ' ,?=r_ - '''=, I = , 1õ .`t.*.b ==-.:=.'. i'.,.',i : L': -.:,'2i'!:;1 ` - - .. - élr."..;,',i4 ! i.PI,=.:,i-.=!
??=;;===4t e 3 ',=,===C'='==-,,f; '' '''rj.,=;1 ', 't ?,';',-,..' ,.e;giezt",1,1.1ràge=tt-'`i ? ,/,=:.:::"=57..._____. __ j '.,;:i li.,y,,,,ii:',:,=,' `,.,-' ' -'''''''ç -' - ',',. 't='=:-._ . ,:e.. = ,,=4=.,:µ 1,===.;=;:==,=:' =
1 i '7 J,":==-=':':' =;;'-'µi=-.r.'= == ''''''' ' i' ' ig., , , %.,-,..y::1-:),,,',..;,,-. ;.,:: = - = =
1 ' '''''=,,,, sj= .. ';'2,-= '-',?;" i=lierilir-.2' 1 717 µ.7.- , iI s '':".:=;.:õ.. _ .: ,., ' rii.....:..çt'i;= ;;`,711.4-,i=[=,;', ,r:s....._....4' =!:' '=.c 1......' ' ' ' = ,='= 4;',..,.; '=" ' =é...====,=er.====A,.
I 'I = =I
; , 1 I ,=:: =
, --t_ _ I .
. , ____ 4..
, ___________________________________________________ _,..
, , .
,...,-4,,,,,..1,:=,1t;
' eltire ,`; , -=-=,,,;;; iel., t4 f = ...',,,',1õ7.:Y '.', ,.. ': :::=,'=,': .. -...
';',;.':ti,?;=:..'.r.'::''''=
- I 1 1 - y - = ,' , ' ,, ,- ', ='', , = , , - -I,' . :. .... .,' ,..= ,'-'.
:,===..;= =,,,,,,,,y, .-:-.2,. 1 I t :==-.,-:.:.''','=?. l''Y'.-=''S','=-',... ;
,I.," ' ','''',' ' ''''" ' I I , ( .',:i'',,e;li '::'=g;;;'(..2. ..-.t.,=,=`,,f'r ;_.'=
'.; ,....-'2õ
' 1 I --,'='-...ïe.':;,ek;::=''...,:=:,===== -=::::=''' iri=,"==7e,, .U.,,=:;-';_ t 1 ..i'el=t..?,;:e4;UV,'' .r=-,,,:,..,,,,e.pw.,,,, , ________ , .
= ., , .
, , .
, i Base de données 3D
Mise à jour : 29-10-2019 Écrit par Mathias Robert-Thomas Doc# PRG-0001-v1-FR
/524:.:1-02-FM\
. i. ...
_:.....
,..:..,-;"
'0/
J.
,., .
;. .. I
..., (..
. , \4::,:.'= 1i N.-.---;---.--' Doc# PRG-0001-vi-FR
Table des matières Introduction ............................................................. 2 Le fonctionnement actuel d'une base de données ........................... 2 La 3' dimension d'une base de données .................................... 3 Les autres atouts de la base de données 3D ............................... 4 Tous droits réservés, Mathias Robert-Thomas 1 Doc# PRG-0001-v1-FR
1. Introduction Les bases de données sont utilisées en informatique pour stocker des données de toutes sortes, à l'exception des larges volumes de données et certains formats de données qui ne sont pas compatibles avec les moteurs de gestion du système de bases de données.
Avec l'arrivée des bases de données 3D, le concept de base de données sera grandement modifié, car l'invention de compression de données qui a permis de faire naître les bases de données 3D
viendra affecté la conceptualisation, la gestion et l'utilisation que l'on peut faire d'une base de données.
La base de données 3D est un système qui répond à de multiples nouveaux besoins dans le monde de l'informatique. Ce système modifie l'utilisation que l'on peut faire d'un logiciel relié
à une base de données. Effectivement, de nouvelles portes s'offre quant à la capacité de stockage, à la sécurité, à l'accès à d'anciennes données, aux multiples liens dynamiques qui peuvent désormais être créés entre les données, une rapidité d'accès exaspéré, ainsi qu'aux tables de données à dimension 3D permettant la création d'une table incorporée dans des champs de données, en plus du typage dynamique des champs, l'implantation possible de hiérarchies pour une nouvelle forme de modélisation de données, ainsi qu'une réduction totale de l'espace occupé par les données de grande taille, etc.
La base de données 3D est dépendante de l'invention de la compression ADN
créée par le même auteur. Cette invention permet de réduire des données à un format spécifique prenant moins de 2 kilo-octet d'espace.
2. Le fonctionnement actuel d'une base de données Une base de données actuelle (non 3D) est un fichier contenant des tables de données.
Ces tables sont définies en largeur (les champs) et en longueur (les enregistrements) : voir la figure 1.
Figure 1¨Table de données dans une base de données NoSitoyen Prénom Nom Åge 1 George Jones 34 2 Matthew Whites 54 3 Harrison Ford 62 4 Catherine Armstrong 29 Tous droits réservés, Mathias Robert-Thomas 2 Doc# PRG-0001-v1-FR
Comme vous voyez à la figure 1, le nombre de champs par enregistrements est défini, et en plus, dans un système de base de données, l'espace occupé par un champ est aussi défini. Ce qui forme des blocs de données définis. Étant donné que les blocs de données sont précis, cela permet de faire des recherches accélérer en accédant systématiquement à la donnée désirée.
Ainsi les bases de données devront conserver cette structure pour continuer à
être rapides.
Étant donné que les bases de données actuelles contiennent des tables de longueur définie, alors il n'est pas possible de conserver d'anciennes données. Par exemple, si George (à la figure 1) était remplacé par Mark , alors George serait perdu, la table conservant seulement les nouvelles données dans la même structure de données.
3. La 3e dimension d'une base de données La 3e dimension est créée avec un bloc de données défini ajouté à des champs de données. Ce nouveau bloc de données défini est en fait un code de compression de données associé à l'invention de compression ADN . Nous pouvons aussi définir des codes de compression à chaque enregistrement. L'important, c'est de conserver une structure de données (champs et enregistrement) étant de longueur définie pour permettre une navigation rapide dans le fichier de base de données.
Le code de compression permet de sauvegarder les données effacées, ainsi à
chaque fois qu'une donnée est modifiée, elle est sauvegardée pour former un nouveau code de compression contenant la donnée modifiée et toutes les anciennes données modifiées en sauvegardant aussi l'ancien code de compression (voir la figure 2).
Figure 2 ¨ Système de sauvegarde perpétuelle des anciennes données Mark Code Comp: 101011010...
George Code Comp: 0011010110...
\if Robin Code Comp: 0000000000...
Tous droits réservés, Mathias Robert-Thomas 3 Doc# PRG-0001-v1-FR
4. Les autres atouts de la base de données 3D
- Les codes de compression peuvent contenir aussi le nom d'utilisateur qui a modifié la donnée.
- Nous pouvons créer un groupe de champ avec un code de compression, ce qui permet de lier plusieurs champs ensemble.
- Les données volumineuses peuvent être compressées (représenté par un code de compression), cela réduit largement le volume de la base de données. Nous pouvons aussi créer des structures de base de données appelées micro base de données>
contenant un large volume de données et prenant peu d'espace.
- Des alertes personnalisées peuvent être déclenchées s'il y avait modifications de données spécifiques.
- Intégration de l'accès à des données par mode hiérarchique, c'est-à-dire que des enregistrements peuvent être inclus l'une dans l'autre.
- En plus de l'enregistrement d'anciennes données, donnant naissance à un système anticorruption, nous pouvons aussi gérer les accès par enregistrement ou par données spécifiques. Ainsi, le niveau de sécurité de la base de données 3D est plus largement augmenté.
- La compression de données ADN permet d'inclure toutes formes de données dans un champ, tel que des listes de vidéos hautes résolutions, des listes d'images hautes résolutions, des listes de grands fichiers, des longs textes, des logiciels, des tableaux de données intégrés, etc. Nous pouvons donc ajouter ce que bon nous semble dans un champ. Des rapports plus complets peuvent être ainsi enregistrés contenant des vidéos, des images et des fichiers, ce qui forme des rapports hautement détaillés sauvegardés dans un seul champ de données.
- Des liens peuvent être créés vers d'autres données dans la base de données, et ce dynamiquement selon chaque donnée individuellement.
- La vitesse d'accès se trouve hautement améliorée, étant donné que les images, les vidéos et les fichiers sont des codes compressés qui remplacent les larges blocs de données non compressés.
Tous droits réservés, Mathias Robert-Thomas 4 Doc# MAT-0003-v295-FR
Annexe 3 =Vencryptage aux chaînons manquants Les pages qui suivent sont une présentation de l'encryptage aux chaînons manquants qui est liée à l'invention de compression ADN.
0 Tous droits réservés, Mathias Robert-Thomas ' y I
=
=
=
õEncryptage aux Chaulons I: Manquants , a .
õ
Auteur: Mathias R.-T. :: Mise à jour: 29-10-2019 :: Créé le-24-01-201Y, - 0 Tous droits réservés:: Doc# SSW-MAT-0005v2-FR
=
!
\
Historique de Ventryptage = 1939-1945: Les allemands inventent durant la seconde guerre mondiale un -encodage qui sera décrypté par les alliés -;à l'insu des Allemands:
--- = 1994: L'explosion d'Internet sur le monde 'amènera à repenser à
sécuriser les données. Même si c'est encodé, le simple fait de posséder l'algorithme d'encryptions permet de trouver rapidement la clé.
= 2019: L'arrivé de la compression ADN permettra de dissimuler; un éncryptage par Chaînons manquants, ce qui permet de multiplier une simple clé de 32 caractères à l'équivalenteune longueur dé clé de des milliards dé-CaraCtères, le tout rapidement et efficacément. L'avantage c'est que même si ont a l'algorithme, cela peut prendre une éternité a un , ordinateur à décoder une simple clé de 32 caradères.
;
I. t!.\
IntrodUction = L'encrypiage aux chaînons manquants pourrait fonctionner sans la compression ADN, sauf que sanS-laçompression ADN, nous Pouvons, ---- avoir une idée de la grosseur du nie4age. La compression ADN efface -toutes traces de la grosseur du message. En plus, d'un pattern 'de variation de la longueur de moins d'Un traitement (nous,Verrons plus loin), ce qui laisse aucune chance aux tentatives'de décryptage - - ¨dlântle"Stines-dtû mesag-_ = Nous aurions pu utiliser 1 seul chaînon manquant, mais Mathias recommande au moins 2.
-I --Le fonctionnerhent -= En utilisant Une compression de données modifié avec des dônnées -fictives qui complète le remplissage des itérations du processus de - compression, en appliquant un filtre sur 2 séquences (recommande au moins 2) durant la compression, nous encodons les ,données.
. _ = De plus, Mathias recommande de rrielangenletableiddef--µ-_____ dis_ponibilités des_caractères, en supposantqü'un pirate ou un espion ne trouvera pas ce d'ode, cela reriforcie la sécurité. Un exemple - ¨ d'encodage complet sera présenté en-ctérrio par Mathias via la classe TEncryption de son site web.
=-=
)1 / \*, , Le fonctionnement = En modifiant avec la clé d'encodage à partir dé 2'endrolts (chaînons manquants) dans le processus de compression, nous encodons aussi à
partir du point jusqu'à la fin des données utiles (ceux quisérvent à la, -reconstitution de l'index en décompressant) de l'index. Celi5ert assurer que les données qui suivent la décompression ne soit pas facilement identifiable. C'est une sécurité supplémentaire.
= Et évidement nous recompressons le message.
= Le nombre d'itérations du processus de compression peut être défini par une partie de la clé.
= La position des chaînons manquants est déterminé par une partie de la clé.
Il est préférable de ne pas utilisé ces parties de la clé lors de l'encodage.
1\ 5 Le fonctionnement = Il est préférable d'encoder l'index initial aussi avant le processus de compression et d'utiliser des données aléatoires pour l'index initial.
_ '= "
, I;
' , _ Figure 1 --,.Protessus de l'a compression ADN
Index initial _ Index initial compressé Do .ées Index et données A compressés Données f=3 = I .
t , Figure 2 ¨,,Encryptage aux Chaînons Manquant Index initial Index initial _ . .
Chaîrion-encrypté
IndexetrL.
^--:
Chaînonencrypte r I ' f =
/
1 L. , , La technique du jeton = Dans une; base de données, le processus pourrait encrypter le mot de passe - - --associé à un nom d'utilisateu.r. Lors d'une tentative de connexion, si avec la _ clé et le mot de passe nous ne retrou.i.ions,pàs le .'même mât sde basse, alors ---- -le processus pourrait invalider une connexion.
õ
= La même chose pour une transaction,' une car bancaire-p`oarai avoir un jeton (une donnée encrypti), lors d'un essaie de transaCiïdP; la banque --- - --renvoie-la'clé tempgrarre pour décqder te jeton. avec le-NIP de l'usager, site jeton est validé dans le compfe-de-rusager, la transaction s'effectue et le s. . , , systeme renvoie un nouveau jeton encribté dans ta carte bancaire Il ne --peut pas Y avoir 2 transactions avec le mênibleton avec la même carte 2 fois de suite si les jetons changent.
9 1 .1 1 tl .. , La technique au jeton' (suite)- 1 -._ õ ,..
1, ..., = Une carte bancaire pourraient avoir un. million (ou plus) de jetons -encryptéÉet compressés. A chaque transaction (avec la technique du . ------ paragraphe préce'dent), si la banque n'a pas renvoyé la clé
temporaire, alors le jeton suivant ne peut pas être connu sur la carte et donc, pas de transaction frauduleùse. Pas de clonagOklè-carte , , possible. : . , ____ =
= Un logiciel sur téléphone, 'tablette ou ,sur ordinateur (où avec les -- cookies) pourrait utiliser la même techn\ - ique précédemment pour _ valider un appareil autorisé pour une connexion. , _--------:-:: - - - ,, ..
1 _ , i 1 ! 10 \'-\. :
/ i / I ,, = =
, Amélioration d -encryptagè' = En mélahgeant la liste (au moins 7 fols)des caractères disponibles _ avec la clé, nous pouvons recréer Une:autre clé. Nous prenons la nouvelle clé pour finaliser l'encryptage sur I,e dernier chaînon.
= Cela a pour effetde rendre le décryptage iehcbre plus long, car même si toutes les possibilités sont testés pour trouver la _pre-Mtère clé, trouver la véritable clé demande encore de tester toute les possibilités,de_clés:ayant servis aux chaînons manquants....
= Et nous. pouvons remélanger-encbsre la listé des caract&es sur plus de fois pour aVOir une autre clé pour l'avant dernier chaînon. Le message _ seraitainSi encrypté avec une autre clé que les chaînons et rendrait --encore plus long leklécryptage.
= t, Amélioration d'encryptage = De plus, nous pouvons utiliser plusieurs chaînons .manquants-(5 à 15 recommandés). . .
= De plus, avéc la compression ADN impliquée dans l'encrypiage, nous = pouvons utiliser la reinitialisation de la-chaîne à décrypter, ce quia pour effet de continuer sur une nouvelle compression ADN. Donc, avec un ' simple caractère dans la de initiale, nous déterminons quand le nouveau _ bloc de compression doit être utilisé.
Deplus,lorsdeiarecherche de nouvelles clés,lious pouvons déterminer quand nous coupons dans le mélange des caractères seulement avec 1 ou 2 caractère fourni en supplémeritaftb-dâns,.la clé initiale. ¨
= De plus, nous pouvons utiliser comme l'eritryptage traditionnelle, 1 - - - caractère danÉ son code binaire dont il.cléteï-mine quand nous reculons, quand nous avançons.
.=
, =
= = 11 / \
1, ..., = Une carte bancaire pourraient avoir un. million (ou plus) de jetons -encryptéÉet compressés. A chaque transaction (avec la technique du . ------ paragraphe préce'dent), si la banque n'a pas renvoyé la clé
temporaire, alors le jeton suivant ne peut pas être connu sur la carte et donc, pas de transaction frauduleùse. Pas de clonagOklè-carte , , possible. : . , ____ =
= Un logiciel sur téléphone, 'tablette ou ,sur ordinateur (où avec les -- cookies) pourrait utiliser la même techn\ - ique précédemment pour _ valider un appareil autorisé pour une connexion. , _--------:-:: - - - ,, ..
1 _ , i 1 ! 10 \'-\. :
/ i / I ,, = =
, Amélioration d -encryptagè' = En mélahgeant la liste (au moins 7 fols)des caractères disponibles _ avec la clé, nous pouvons recréer Une:autre clé. Nous prenons la nouvelle clé pour finaliser l'encryptage sur I,e dernier chaînon.
= Cela a pour effetde rendre le décryptage iehcbre plus long, car même si toutes les possibilités sont testés pour trouver la _pre-Mtère clé, trouver la véritable clé demande encore de tester toute les possibilités,de_clés:ayant servis aux chaînons manquants....
= Et nous. pouvons remélanger-encbsre la listé des caract&es sur plus de fois pour aVOir une autre clé pour l'avant dernier chaînon. Le message _ seraitainSi encrypté avec une autre clé que les chaînons et rendrait --encore plus long leklécryptage.
= t, Amélioration d'encryptage = De plus, nous pouvons utiliser plusieurs chaînons .manquants-(5 à 15 recommandés). . .
= De plus, avéc la compression ADN impliquée dans l'encrypiage, nous = pouvons utiliser la reinitialisation de la-chaîne à décrypter, ce quia pour effet de continuer sur une nouvelle compression ADN. Donc, avec un ' simple caractère dans la de initiale, nous déterminons quand le nouveau _ bloc de compression doit être utilisé.
Deplus,lorsdeiarecherche de nouvelles clés,lious pouvons déterminer quand nous coupons dans le mélange des caractères seulement avec 1 ou 2 caractère fourni en supplémeritaftb-dâns,.la clé initiale. ¨
= De plus, nous pouvons utiliser comme l'eritryptage traditionnelle, 1 - - - caractère danÉ son code binaire dont il.cléteï-mine quand nous reculons, quand nous avançons.
.=
, =
= = 11 / \
Claims (20)
1. La prise en charge d'une compression sans perte atteignant 99,9999 % de réduction du volume de données.
2. L'utilisation de 2 variables (le nombre d'itérations et la position de la fin dans l'index), avec l'utilisation d'un index (étant un bloc de données compressées) sont l'unique nécessaire pour la compression ADN.
3. L'utilisation de la méthode de double lecture : une lecture pour chaque série, et une lecture pour les bits ajoutés en fin de lecture. Les lectures s'effectuent en faisant une transformation qui pousse vers la nécessité de la donnée suivante.
4. Tous systèmes, matériel ou logiciel, de distribution, téléchargement ou envoie de données via un réseau électronique, information, câble, téléphonie, que cela soit accompli par un petit fichier ou un bloc de données utilisant une décompression ADN pour être décodé et lu.
5. Tous les formats de données vidéos, audios, images, textes, ou binaire, qui utilise une compression ADN, sous forme de fichier, dossier, lecteur ou bloc de données.
6. Tous les systèmes, matériel ou logiciel, de stockage ou de duplicatas (backup), sous forme de média électronique, clé USB, carte SD, cd, DVD, cassette, disquette, disque, puce électronique, bande magnétique.
7. Tous les systèmes de transport, par câble ou par onde, de données compressées ADN qui en fait un usage significatif de ce type de données.
8. Tous les systèmes d'affichage ou audio, qui utilisent une source de données compressées ADN.
9. Tous les exécutables miniaturisés avec la compression ADN, soit pour réduire le volume de code exécutable au stockage interne d'un système nano, ou pour réduire le volume d'un exécutable d'installation logiciel ou firmware.
10. Tous les systèmes cartésiens ou géographiques utilisant la compression de données ADN.
11. Tous les systèmes de stockage utilisant une structure relevant de la compression ADN, telle la base de données ADN, la base de données traditionnelle, mais avec un type de données compressé, fichier compressé en tout ou en partie, structure de système de courriel permettant d'enregistrer à l'infini sur le même espace mémoire.
12. Doublage d'information sous un format de données de compression ADN. Par exemple, un format de stockage vidéo contenant différentes tailles d'écran et/ou différentes langues, un format de stockage audio contenant la piste de chaque instrument ou la piste sans un instrument ou voix, défini pour laisser le choix à l'utilisateur.
13. Compression de compression. Pour la vidéo ou l'audio par exemple. Permets d'accéder plus rapidement à la piste audio ou la séquence vidéo.
14. Destiné à réduire la bande passante. Par exemple, système de vidéos caméras de surveillance.
15. Système de cryptage, par exemple, les chaînons manquants pour l'avantage de toujours avoir le même volume pour tous les volumes d'information à crypter et aussi allonger le temps de décryptage par les pirates.
16. Système de télévision sans horaire, c'est-à-dire qui permet le téléchargement d'un fichier compressé contenant la vidéo ou l'audio sans que cela soit diffusé seulement à
une plage horaire fixe.
une plage horaire fixe.
17. Système de compression de la boîte courriel et des pièces jointes par message.
18. Système de compression de bande audio partiel ou d'images formant une vidéo en direct.
19. Système de listing de bloc de données compressées formant soit une vidéo qui peut être lu à une seconde ou un moment précis de la vidéo. Cela peut s'appliquer aussi pour les bandes audios. Le listing peut s'appliquer aussi pour le format d'affichage ou sonore. Le listing peut s'appliquer aussi pour le choix de langue.
20. Tous les systèmes de listing reliés aux téléchargements de bloc de données ou fichiers compressés.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CA3060809A CA3060809A1 (fr) | 2019-10-31 | 2019-10-31 | Compression adn |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CA3060809A CA3060809A1 (fr) | 2019-10-31 | 2019-10-31 | Compression adn |
Publications (1)
Publication Number | Publication Date |
---|---|
CA3060809A1 true CA3060809A1 (fr) | 2021-04-30 |
Family
ID=75683056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CA3060809A Abandoned CA3060809A1 (fr) | 2019-10-31 | 2019-10-31 | Compression adn |
Country Status (1)
Country | Link |
---|---|
CA (1) | CA3060809A1 (fr) |
-
2019
- 2019-10-31 CA CA3060809A patent/CA3060809A1/fr not_active Abandoned
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yazdi et al. | Portable and error-free DNA-based data storage | |
Wilkinson et al. | Metadisk a blockchain-based decentralized file storage application | |
US8117463B2 (en) | Information device, information server, information processing system, information processing program method, and information processing program | |
US6868405B1 (en) | Copy detection for digitally-formatted works | |
JP5679951B2 (ja) | メディアファイルを記憶する方法 | |
CN101599083B (zh) | 信息处理系统和信息处理方法 | |
US8140852B2 (en) | Authenticating serialized commodities | |
Pan et al. | Rewritable two-dimensional DNA-based data storage with machine learning reconstruction | |
KR101606623B1 (ko) | 디지털 상품들의 소유권을 확인하기 위한 방법 및 시스템 | |
CN102708314A (zh) | 数字权利管理供应装置,系统以及方法 | |
KR102107438B1 (ko) | 블록체인을 이용한 전자 문서 관리 장치 및 이의 동작 방법 | |
TWI552015B (zh) | 用於複合文件之方法、電腦系統及非暫時性電腦可讀儲存媒體 | |
US11409845B2 (en) | Method for determining if a machine learning model has been copied | |
US20230109369A1 (en) | First copyright holder authentication system using blockchain, and method therefor | |
Alkhudaydi et al. | Integrating light-weight cryptography with diacritics Arabic text steganography improved for practical security applications | |
CN102542340A (zh) | 业务单据批号编码方法和装置 | |
CA3060809A1 (fr) | Compression adn | |
Gregoriadis et al. | Analysis of arbitrary content on blockchain-based systems using BigQuery | |
FR3099257A1 (fr) | Procede pour obtenir un actif numerique authentifie | |
Koukopoulos et al. | Security in collaborative multimedia web-based art projects | |
FR2832231A1 (fr) | Procede pour generer des nombres aleatoires | |
FR2829643A1 (fr) | Procede pour generer des nombres aleatoires | |
Iftikhar et al. | GenInfoGuard—a robust and distortion-free watermarking technique for genetic data | |
Hosp | Cryptocurrencies simply explained-by TenX Co-Founder Dr. Julian Hosp: Bitcoin, Ethereum, Blockchain, ICOs, Decentralization, Mining & Co | |
EP1679853A1 (fr) | Procédé de téléchargement de données à partir d'une borne de téléchargement |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FZDE | Discontinued |
Effective date: 20230502 |
|
FZDE | Discontinued |
Effective date: 20230502 |