Chu Ge s'énervait en parlant. Il tira une cigarette de sa poche et allait l'allumer, mais après un coup d'œil à Chen Zhuo, il la remit rageusement dans sa poche.
« C'était censé être un simple système d'inventaire — il suffisait de faire un front-end et de le connecter à une base de données. Mais le patron a insisté pour y ajouter cette logique d'allocation complètement dingue. »
Chu Ge gesticula des mains.
« Les stocks sont tendus. Les commandes des hôpitaux municipaux ont la priorité absolue, suivies des grandes chaînes de pharmacies, et enfin des petites cliniques des comtés en dessous. Et on ne peut pas couper complètement les petites cliniques — il faut réserver un stock de base de dix pour cent et le leur répartir proportionnellement. »
Chen Zhuo écouta en silence sans l'interrompre.
« Quand Lu Jia a écrit l'algorithme d'allocation, elle a utilisé des boucles imbriquées. »
Chu Ge se massa les tempes, un mal de tête en préparation.
« Si une commande vient d'un hôpital, elle emprunte le chemin A : vérifier le stock, déduire. Si c'est une pharmacie, elle emprunte le chemin B : vérifier le stock, déduire proportionnellement. Logiquement, il n'y a rien de mal à ça. »
Chu Ge marqua une pause, son expression s'assombrissant.
« Mais la deadline, c'est ce soir. Lu Jia et moi avons injecté trente mille lignes de données simulées pour un test de charge. Trente mille commandes, toutes avec des étiquettes de priorité différentes, sont arrivées d'un coup. Ces instructions conditionnelles If-Else étaient imbriquées sur cinq ou six niveaux. Le serveur doit répéter sans cesse parcours, comparaisons et tris sur toutes ces dizaines de milliers de commandes en arrière-plan. »
« Et ensuite ? » demanda Chen Zhuo.
« Et ensuite l'utilisation CPU a flambé à cent pour cent, la mémoire a saturé, le ventilo du boîtier a tourné si vite qu'il a failli fumer, et le système a planté. »
Chu Ge s'affala dans sa chaise.
« La complexité algorithmique est juste trop élevée. Lu Jia et moi avons passé l'après-midi entier à bidouiller les paramètres, mais quoi qu'on change, ça finit en interblocage. Le patron a dit que ça doit tourner ce soir. Si ça ne tient pas ces trente mille requêtes simultanées, on perd le paiement final de plus de dix mille yuans. »
Une fois fini, Chu Ge fixa Chen Zhuo, les yeux pleins d'un espoir désespéré.
« Frère Zhuo, t'es brillant, et t'as des solides bases en maths. Tu peux m'aider à démêler ça ? Quel est le vice de fond dans la logique sous-jacente ? »
Chen Zhuo resta assis, le regard posé sur l'exemplaire de *Landau* sur le bureau. Il réfléchit en silence quelques secondes.
Il avait compris.
'Le problème auquel Chu Ge et Lu Jia se heurtent,' songea-t-il, 'c'est qu'ils essaient de traverser un labyrinthe avec la méthode la plus directe, la plus maladroite qui soit : la force brute.'
'Avec un petit volume de données, l'ordinateur peut gérer la vérification d'identité un par un, la mise en file d'attente et l'allocation des ressources.'
'Mais dès que le volume de données explose exponentiellement, les boucles imbriquées deviennent un trou noir computationnel.'
'En logique pure, c'est isomorphe à l'impasse qu'il avait rencontrée en lisant l'article de l'équipe de Princeton.'
"L'équipe de Delian avait tenté d'utiliser le calcul de l'espace-temps continu pour franchir la Singularité et s'était heurtée à la divergence. Chu Ge et son équipe tentaient d'utiliser des instructions conditionnelles linéaires pour traiter un énorme nombre de commandes imbriquées et se heurtaient à un débordement mémoire."
Chen Zhuo hocha la tête.
« Votre approche était viciée dès le départ. »
Le ton de Chen Zhuo était uniforme.
Chu Ge resta coi, la bouche à demi ouverte.
« Viciée ? L'allocation par logique conditionnelle — c'est pas la méthode de planification la plus fiable qu'apprennent les bouquins de programmation ? »
Chen Zhuo ne se pressa pas d'expliquer.
Il attrapa la feuille de brouillon qu'il utilisait tout à l'heure, celle couverte de formules de dérivation physique.
Il parcourut des yeux les calculs denses à sa surface — la théorie de Landau qu'il venait de finir. Chen Zhuo retourna négligemment la feuille, révélant l'autre face, imprimée de code C obsolète.
L'interlignage du code était large, laissant beaucoup d'espace blanc entre les lignes.
Dans une zone vierge, il traça d'un trait léger un point d'encre noire.
« Vous traitez ces commandes comme des gens qui font la queue pour acheter des billets. »
Chen Zhuo expliqua en dessinant.
« La file s'allonge, alors vous ouvrez trois guichets différents. Pour chaque personne qui passe, il faut demander "Tu viens d'où ?" avant de décider vers quel guichets l'orienter. Quand la foule grossit trop, le guichet se bloque complètement. »
Chu Ge se pencha, les yeux rivés sur le point noir sous le stylo de Chen Zhuo.
« S'ils ne font pas la queue, comment vous voulez les trier ? » demanda Chu Ge.
Chen Zhuo traça quelques points noirs supplémentaires, espacés du premier, puis les relia par des lignes droites.
« Traitez-les comme des nœuds d'états individuels. »
D'un coup de poignet, Chen Zhuo esquissa sur le papier la structure d'un graphe biparti, pas l'arborescence que Chu Ge avait décrite.
« Abandonnez la mentalité de parcours linéaire. Abstrayez directement les hôpitaux, pharmacies et cliniques en points algébriques à poids différents. Abstrayez le stock existant en un ensemble. »
Dans un autre espace blanc de la feuille, Chen Zhuo nota rapidement quelques variables de base des mathématiques discrètes, puis appliqua une formule de correspondance matricielle minimaliste.
« Dans cette Matrice Discrète, pas besoin de demander "si". Une commande arrive, elle apporte sa valeur de poids — disons 3 pour un hôpital, 2 pour une pharmacie, 1 pour une clinique. Vous effectuez directement un mapping multiplicatif entre la matrice des commandes et la matrice des stocks. Ceux qui ont les poids les plus forts se verront naturellement attribuer un nœud de stock en premier. »
Chen Zhuo ajouta un trait final à la formule.
« Si un nœud de stock tombe à zéro, il devient inactif dans la matrice, et les mappings suivants le contourneront automatiquement. Toute la logique se joue en une seule opération matricielle, au lieu de faire tourner des dizaines de milliers de boucles imbriquées. »
Après la dernière ligne, Chen Zhuo poussa le brouillon devant Chu Ge.
Chu Ge fixa la structure matricielle nette sur le papier, son cerveau traduisant à toute vitesse les symboles mathématiques en langage de base de données qui lui était familier.
Bien que les bases mathématiques de Chu Ge ne valent pas celles de Chen Zhuo, il avait tout de même réussi à entrer dans la classe junior de Keda. Sa compréhension logique restait du premier ordre.
Il regarda une trentaine de secondes.
« Putain... »
Chu Ge releva la tête d'un coup. L'air abattu dans ses yeux avait totalement disparu, remplacé par l'étincelle vive de l'illumination subite.