081129 10 min

rapports entre ratio et raison

Voici deux exercices d'ordre topologiques, dont la résolution est bienfaitrice pour le mécanise de la pensée. En quelque sorte cela permet au cerveau de fixer des voies réflectives viables, qu'on appelle « la rationalité », le plus souvent en ignorant l'expérience que ça constitue.

En premier il s'agit de ce qui permet un classement taxonomique.
Cela est utilisé parfois dans les forums où on peut répondre à une réponse et ainsi de suite ; il s'agit de la récursivité.

La classification va se faire au moyen de deux identificateurs. Si on n'utilise qu'un seul identificateur pour chaque objet, le seul classement permit est l'ordonnement de ceux-ci.
Si on en utilise deux, on accède à la fonction « au carré », ou de « puissance ».

(Souvent le langage courant et oral est un identificateur unique d'objets vu et connus, il ne permet pas de classement raisonnable entre les termes, ce classement est confié à l'entendement. Or ici et dès lors, c'est la notion de langage qui est révolutionnée, il s'agit d'un langage topologique, proto-mathématique.)

Ce qu'on appelle le classement topologique d'habitude est une suite ordonnée et unique de nombres qui possèdent eux-même un sub-langage qui lui est propre, mais limitatif.
Par exemple la suite : 1,11,12,13,2,21,22,23,231,232,233,3 (etc...) est ici ordonnée et topologique, car elle ignale les entrées d'embranchements. Par contre le nombre d'embranchements et de sous-embranchements est limité à 10, ce qui est toutefois suffisant pour décrire mathématiquement un arbre.

Si on avait des lettres, c'est le nombre 26 qui pourrait être poussé à la puissance, et si on ajoutait un point (1,1.1, 1.2, 1.11, 1.12, 2, 2.1, 2.1.1, 2.1.2, etc...) dans ce cas, en ajoutant un élément de langage supplémentaire, on se libère de la limitation.

C'est ainsi qu'on a abouti à la notion selon laquelle on avait besoin de un identificateur et une ponctuation, soient deux signes nécessaires et suffisants pour la création du plus simple des langages topologiques, et du plus complexe des langages courants.

Ici n'utilisons que deux identificateurs et aucun signe, à part pour la notation écrite qui sont nommés ID et IB.

Chaque objet reçoit un n°d'ID et chaque objet topologique hérite de l'ID auquel il est rattaché, enregistré en tant que IB.

Ainsi pour chaque ID il se peut que certains objets aient ce numéro pour IB :
1
2=>5,6
3=>7,8
4=>9,10

Maintenant apparaît la question de trouver l'algorithme qui permet la création de l'ordonnement topologique basé sur un identificateur et un signe, à partir ce cette présentation à deux identificateurs et zéro signe (à part pour rendre confortable sa lecture).

Il s'agit d'enquêter dans la base de données pour créer cet ordre topologique.
L'algorithme récursif est unique et répétitif.
Si on dit à l'algorithme « chaque IB est rattaché à un ID », alors cela signifie qu'on va faire une enquête montante, à partir d'un objet jusqu'au premier de ses noeuds, afin de le localiser dans la hiérarchie.
Si on lui dit « à partir de chaque ID trouve ceux qui ont ce nombre een tant que IB », alors on fait une enquête descendante, et on dessine les noeuds qui vont du haut vers le bas.

Dans le premier cas, il n'y a qu'une et une seule réponse possible, car pour plusieurs objets qui auraient le même IB, il n'y a qu'un ID topologique situé au-dessus, et auquel il est rattaché. Donc le résultat sera une suite de nombres signifiant le chemin qui permet d'accéder à l'objet.

Dans le second cas, une enquête descendante (ou une division), la réponse est multiple, car pour chaque noeud du réseau il y aura de multiples embranchements à signaler.

Il est certain que la première solution est à utiliser localement, rapidement, et à la volée tandis que la seconde solution est générique, et n'a a être faite qu'une seule fois pour être exhaustive.
Et qu'ensuite si on veut faire une enquête montante, il s'agira d'utiliser les données obtenues de l'enquête descendante.

Déjà on peut s'apercevoir que selon la lourdeur des bases de données, il y a trois mode d'exploration bien distincts :
les enquêtes montantes, ponctuelles et très rapides ;
les enquêtes descendantes assez gourmandes en ressources ;
si on a besoin de faire beaucoup d'enquêtes montantes, mieux vaut commencer par une enquête descendante afin de l'explorer ensuite plus rapidement.

Par contre, cette dernière solution devra être réactualisée de temps en temps, jusqu'au point où il ne sera plus possible de faire des enquêtes descendantes tant la charge sera importante (limitation du processeur).
C'est pourquoi en économie logicielle il convient de mesurer paisiblement la quantité de mémoire requise pour chacun de ces processus afin de choisir celui qui est le plus approprié aux différents usages.
C'est ainsi qu'apparaît la notion selon laquelle, à partir d'un seuil très faible, il devient plus logique de changer complètement de méthode.

L'algorithme d'analyse :

Lui il ne sert que pour un cylce de travail, qui doit être répété indéfiniment.
Par exemple quand j'arrive à un embranchement, il me dit où sera l'embranchement suivant, qu'il soit unique ou multiple. (par corolaire, si le conduit mène à des solutions multiples, alors cela indique que le travail est descendant, et s'il mène à une solution unique, cela indique que ce travail est montant – Ceci est très éclairant pour ceux qui voient combien la science a tendance à recherche des lois uniques, mais en trouvent finalement toujours des multiples...).

La longueur ou l'étendue du travail de l'algorithme récursif ne peut excéder un cycle complet.
Au début on peut faire l'erreur de vouloir dire à l'algorithme « trouve où mène tel embranchement et où mène le second ». Dans ce cas il ne pourra pas être un pattern répétitif. Ou si on lui dit seulement « trouve à quel IB correspond tel ID », il ne peut pas faire le lien de l'ID à l'IB suivant.

Parfois il est bon de poser tout ça sur un graphique avec un petit bout de papier, et soudain on se sent délesté d'une trop grande charge de significations polluantes.

|IB---objet1---ID|
____________|IB---objet2---ID|

De cette manière je suis sûr que c'est plus clair pour le lecteur.
L'algorithme doit obligatoirement faire le chemin qui consiste à aller de ID vers IB et de IB vers ID.
Ensuite, avant de renvoyer le résultat, il s'auto-confie la tâche d'enquêter sur l'ID qu'il vient de trouver en tant que nouveau point de départ de son enquête. Une fois qu'il a fini de monter, il bute sur une limite qui est la non-correspondance. Et alors à ce moment-là, le curseur redescend toutes les recherches et débouche sur le renvoi du résultat. (comme s'il avait ouvert une grande somme de parenthèses et qu'il devaient toutes les refermer pour faire le calcul).

Ainsi on voit en passant comme fonctionne l'algorithme, c'est très intriguant, comme un courant électrique qui fonctionne en circuit fermé. L'opération d'un algorithme n'est pas à proprement parler « un calcul », mais surtout « une enquête débouchant au calcul », suivi d'un calcul. C'est un processus.

- Deuxième exercice, celui du ratio

Soit dit, un objet d'une hauteur X, telle la partie affichée de la fenêtre du site web.
Soit inclus du coup l'objet d'une hauteur H, qui est la hauteur réelle de la page, inclut ce qui n'est pas affiché.
Que découle de cela l'outil logique permettant d'y naviguer, nommé l'ascenseur.

Vous allez sans doute vous moquer mais j'ai mis des années avant de savoir comment écrire l'algorithme qui permet la navigation. Mais dès lors que j'ai trouvé les mots qu'ils fallaient, tout est apparu dans sa plus sublime clarté.

Il faut dire qu'à un niveau élémentaire des confusions apparaissent et nous engluent dans un marasme dont il est difficile de s'extraire. Cela arrive très souvent, par exemple aux civilisations en train de s'effondrer, ou même dans l'esprit mal formé des gens qui se croient intelligents et qui ne sont capables de ne retenir que la colère et la haine issue de l'échec de ce processus, plutôt que les données utiles à sa résolution.

Nous notons parmi les données du problème le côté pratique de l'ascenseur étant qu'il soit appairant, et donc constitué d'une hauteur dite Y. Et nous allons ajouter par soucis de perfection que cet ascenseur soit d'une hauteur Y proportionnelle à la partie affichée de la page par rapport à la partie totale, affichée et non affichée.

Ce n'est pas cela qui fait « le rapport », et déjà peut se créer la première confusion, puisque le rapport réellement important est celui entre la partie affichée et totale, entre X et H.
La hauteur Y de l'ascenseur, ne fait que découler de ce premier ratio, et il convient de noter dès le début que le but de l'opération consiste à créer la fonction de défilement : quand je pousse l'ascenseur vers le bas, la page part vers le haut, de sorte que quand j'arrive en bas de l'ascenseur je vois le bas de la page.

Le premier instinct, se souvenant des cours de math de la classe de cinquième, qui eux-mêmes étaient une reprise des cours de CE2, est « la règle de trois ». Et bien que cela soit complètement enfantin il m'a fallu des décennies pour en saisir toute la portée philosophique, afin de savoir la pratiquer sans me planter.

On se dit : « j'ai qu'à diviser la grande hauteur par la petite, et j'obtiens le ratio, que j'applique à l'ascenseur pour qu'en découle la position de la page ». (et mettons un signe « moins » au résultat pour que la page défile vers le haut quand je descend l'ascenseur ».)

Ben voyons...

Si je fais cela, il se passe que la partie basse de la page ne s'affiche pas puisque la hauteur de l'ascenseur étant non nulle, elle empêche de voir s'afficher sa hauteur * par le ratio de la page.

Au début je me disais « cherchons plutôt DIFF, la différence entre la partie affichée et la hauteur totale, car ce serait cool d'avoir des deux données bien distinctes, la partie affichée et la partie masquée. Comme cela je sais que la quantité de défilement voulu est celle de la partie masquée, et ceci posé comme 100%, en rapport avec la hauteur de l'ascenceur, me donnait le ratio ».

Cela s'appelle « tourner en rond ».
La solution est de pouvoir prendre en compte les trois éléments simultanément, que sont les trois hauteurs, selon une chaine ordonnée de processus.
Car il s'agit avant de commencer de connaître la hauteur de l'ascenseur avant de pouvoir réinjecte cette hauteur dans la quantité de défilement qui me permet de visualiser la totalité de la page, d'une hauteur H.

En fait si je ne fais que le travail entre H et X, j'extrais le ratio mais il est inapplicable dans ajouter un composant rétroactif tenant compte de la hauteur de l'ascenseur (ce qui est une mauvaise économie de charge processeur).
Et je ne m'occupe que de l'ascenseur par rapport à la hauteur, j'obtiens un ratio arbitraire sans rapport avec la réalité.

Dans l'ordre :
je mesure la hauteur H
je mesure la hauteur X
j'en déduis la hauteur Y :
_____________________ ratio = X/H ;
_____________________ Y = X*ratio ;

En fait cela procède d'une simplification d'un complexité.
Si la hauteur de l'ascenseur est arbitraire, j'ai deux ratios, et pour résoudre le fait de sa non-non-hauteur, il faut déduire sa hauteur de ce qu'on croit être X, avant de calculer le ratio. Mais encore, on se risque à une légère imprécision du fait de l'arrondi, dont la conséquence est démultipliée.
Non ce qu'on veut est une solution mathématique.

mais si la hauteur de l'ascenseur découle du premier ratio, alors par une sorte de magie je n'ai plus à m'occuper des différences de hauteur car elles s'annulent, un peu comme dans une opération mathématique on opère des simplifications en barrant les équivalences consécutivement multipliées et divisées.
Et alors seulement le ratio peut être appliqué au déplacement de l'ascenseur pour recouvrir la totalité de la page :

ratio=H/X;
newpos=asc._y*ratio*-1;

C'est à dire que la solution instinctive était la bonne, mais si et seulement si elle était plongée dans le mécanisme adéquat, c'est à dire en impliquant que le ratio était récursivement le même entre H et X, puis entre X et Y.

8119