Forum Programmation.c Algo en C, quel livre choisir

Posté par  (site web personnel) .
Étiquettes :
0
21
juil.
2004
Bonjour,

Suite à mon post algo: ne pas réinventer la roue (http://linuxfr.org/forums/19/2562.html(...))

On m'a conseillé la lecture d'ouvrages sur les algorithmes en C.

avec entre autres:


Voila en bref, j'hésite car je n'ai pas une immense fortune et je ne suis pas à la fac (pas de bibliothèque universitaire).

Pourriez vous me conseillez svp ?

Julien.
  • # Un livre

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    Algo en C, chez o'reilly france.

    D'ailleurs si tu faisais de bons articles sur linuxfr, tu serais susceptible de gagner ce livre (je me permets de l'indiquer au cas ou tu penses que le temps passé vaut le prix du livre).
    • [^] # Re: Un livre

      Posté par  . Évalué à 2.

      D'ailleurs si tu faisais de bons articles sur linuxfr, tu serais susceptible de gagner ce livre : ça sent le piston ;-)

      Sinon, le TAOCP de D. Knuth se trouve sur alapage com
    • [^] # Re: Un livre

      Posté par  (site web personnel) . Évalué à 2.

      Algo en C, chez o'reilly france


      Oui ce bouquin à l'air vraiment pas mal. J'avais eu l'occasion de le mater un peu. Mais c'est pénible souvent les ouvrages sont sous plastique.

      D'ailleurs si tu faisais de bons articles sur linuxfr, tu serais susceptible de gagner ce livre (je me permets de l'indiquer au cas ou tu penses que le temps passé vaut le prix du livre).


      Oui mais vu le nombre de mes dépêches:


      Je ne risque pas de gagner grand chose et c'est légitime. Par contre si il y a besoin d'un coup de main pour améliorer la sémantique ou le html du site (j'ai pas mal bossé l'accessibilité) je suis partant.
  • # mon code :

    Posté par  . Évalué à -1.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int short fich[4000000];
    unsigned long int tfile;
    void remplacer(char *chaine1, char *chaine2);
    void lien(char *chaine);
    int main(){
    FILE *fichier;
    char nom[81];
    unsigned long int i=0, j;
    system("ls *.log");
    printf("nom du fichier image :");
    scanf("%80s", nom );
    printf("\n---analyse du fichier---\n");
    fichier = fopen( nom , "r" ) ;
    if ( ! fichier ){
    printf("\n---erreur d'ouverture de fichier---\n");
    exit(1);
    }
    while(1){
    fscanf(fichier, "%c", &fich[i]);
    i++;
    if (feof(fichier)) break;
    }
    printf("\n---Fin du fichier---\n");
    tfile=i;
    for ( j = tfile+5 ; j > 0; j-- )
    fich[j]=fich[ j - 5];
    tfile+=5;
    if (fclose(fichier)) {
    printf("\n---erreur de fermeture de fichier---\n");
    exit(1);
    }
    remplacer("|\"LNOR", " ");
    remplacer("|\"LGRA", " ");
    remplacer("|\"LITA", " ");
    remplacer("|\"LRED", " ");
    remplacer("\n", "");
    liens("http://");
    printf("Nom du fichier fin :");
    scanf("%80s", nom );
    printf("\n");
    fichier = fopen( nom , "w" ) ;
    if ( ! fichier ){
    printf("\n---erreur d'ouverture de fichier---\n");
    exit(1);
    }
    for ( i=4 ; i < tfile; i++ ) {
    fprintf( fichier, "%c", fich[i] );
    }
    if (fclose(fichier)) {
    printf("\n---erreur de fermeture de fichier---\n");
    exit(1);
    }
    exit(1);
    }
    void remplacer(char *chaine1, char *chaine2){
    int i, j, verif, l1, l2;
    l1=strlen(chaine1);
    l2=strlen(chaine2);
    printf("On remplace la chaine ''%s'' de %d caractères, par la chaine ''%s'' ne %d caractères.\n", chaine1, l1, chaine2, l2);
    for (i=0; i<tfile;i++){
    verif=0;
    for (j=0; j<l1;j++){
    if ( fich[i+j] == *(chaine1 + j) ){
    verif++;
    }
    }
    if (verif==l1){
    for ( j = i ; j < tfile - l1; j++ )
    fich[j]=fich[ j + l1];
    for ( j = tfile+l2 ; j > i; j-- )
    fich[j]=fich[ j - l2];
    for ( j = i ; j < i + l2 ; j++ )
    fich[j]=*( chaine2 + j -i);
    tfile=tfile+l2-l1;
    }
    }
    }

    void liens(char *chaine){
    printf("Rencherche de site\n");
    int short i, j, verif, tchaine, debut, fin, l1, l2;
    char *chaine2, *chaine3;
    tchaine=strlen(chaine);
    printf("Chaine %s de %d caractères\n", chaine, tchaine);
    for (i=0; i<tfile;i++){
    verif=0;
    for (j=0; j<tchaine;j++){
    if ( fich[i+j] == *(chaine + j) ){
    verif++;
    }
    }
    if (verif==tchaine){
    printf("Site trouvé\n");
    debut=1;
    while(fich[i+debut]!=32 && fich[i+debut]!=13 && fich[i+debut]!=60 && fich[i+debut]!=62 ){
    debut--;
    }
    debut++;
    printf("debut de l'url au caractère :%d\n", debut);
    fin=0;
    while( fich[i+fin]!=32 && fich[i+fin]!=13 && fich[i+fin]!=60 && fich[i+fin]!=62 ){
    fin++;
    }
    printf("fin de l'url au caractère :%d\n", fin);
    printf("taille de l'url :%d\n", fin-debut);
    chaine2 = (char *)malloc((fin-debut)*sizeof(char)+1);
    chaine3 = (char *)malloc((2*(fin-debut)+17)*sizeof(char)+1);
    for (j=0;j<fin-debut;j++){
    *(chaine2+j)=fich[i+debut+j];
    *(chaine3+j+9)=fich[i+debut+j];
    *(chaine3+j+11+fin-debut)=fich[i+debut+j];
    }
    printf("%s\n", chaine2);
    *( chaine3 ) = 60 ;
    *( chaine3 + 1 ) = 97 ;
    *( chaine3 + 2 ) = 32 ;
    *( chaine3 + 3 ) = 104 ;
    *( chaine3 + 4 ) = 114 ;
    *( chaine3 + 5 ) = 101 ;
    *( chaine3 + 6 ) = 102 ;
    *( chaine3 + 7 ) = 61 ;
    *( chaine3 + 8 ) = 34 ;
    *( chaine3 + 9 + fin - debut ) = 34 ;
    *( chaine3 + 10 + fin - debut ) = 62 ;
    *( chaine3 + 11 + ( fin - debut ) * 2 ) = 60 ;
    *( chaine3 + 12 + ( fin - debut ) * 2 ) = 47 ;
    *( chaine3 + 13 + ( fin - debut ) * 2 ) = 97 ;
    *( chaine3 + 14 + ( fin - debut ) * 2 ) = 62 ;
    *( chaine3 + 15 + ( fin - debut ) * 2 ) = 32 ;
    *( chaine3 + 16 + ( fin - debut ) * 2 ) = 0 ;
    *( chaine3 + 17 + ( fin - debut ) * 2 ) = 0 ;
    printf("%s\n", chaine3);
    l1=1+(fin-debut);
    l2=17+(fin-debut)*2;
    printf("%d %d", l2, strlen(chaine3));
    for ( j = i + debut; j < tfile - l1+1; j++ )
    fich[j]=fich[ j + l1-1];
    for ( j = tfile+l2 ; j > i+debut; j-- )
    fich[j]=fich[ j - l2];
    for ( j = 0; j < l2; j++ )
    fich[j+i+debut]=*( chaine3 + j);
    tfile=tfile+l2-l1;
    i=i+l2+1;
    }
    }
    }
    • [^] # Re: mon code :

      Posté par  . Évalué à 0.

      bon coucou747, ça ça aide pas pour choisir un livre...
      je sais mais pour moi, une source comme celle la est mieux car tu peux me demander des détails...
      Et en plus, met tes autres sources a toi sur pccfrance.com, met des commentaires sur les sour(ces des autres, comme ça les autres seront symaps avec toi, et ensuite poses tes questions, on aprends facilement comme ça tout en produisant pas mal de code...
      Il y en a qui ont fait des moteurs 3d et des ia alors tu trouvera tout question algo.
      http://www.cppfrance.com(...)
      ça existe aussi pour d'autres languages allez voir, puis dans autres languqges (s'affiche mal avec konqueror, utilisez mozilla)
      • [^] # Re: mon code :

        Posté par  (site web personnel) . Évalué à 2.

        bon coucou747, ça ça aide pas pour choisir un livre...


        C'est sûr...

        http://www.cppfrance.com(...)


        Je connaissais ce site, mais j'avais arrêté de le consulter car il ne passait pas sous firefox.
        Je vais peut être retourner voir ce qu'il en ai mais ça m'a l'air vachement orienté windows/directx et tout le toutim.
    • [^] # Re: mon code :

      Posté par  (site web personnel) . Évalué à 2.

      Dans l'autre topic à la limite ou comme tu l'a fait, par un simple lien.

      Je ne critique pas ton travail mais je me documente là, d'ailleurs c'est pour ça que j'ai crée un autre topic.
      • [^] # Re: mon code :

        Posté par  . Évalué à 0.

        A l'origine, tu demandais un code, j'ai 15 ans, j'ai fais un programme de crypto RSA, un programme pour obtennir des nombres premiers, des nombres parfaits, de la stéganographie ect... rien en graphique, tout en algorythme... J'ai eu comme livre : Le language C c'est tout, j'ai pas pris de cours d'informatiques ect... Pour moi, t'as pas besoin de livre pour aprendre ça, c'est juste une question de bon sens de recherche sur internet, et de savoir faire un shéma (ce que je n'ai jamais fait autrement que pour expliquer aux autres comment tourne mes programmes...) Tu vas aller lire un livre qui va t'expliquer 1000 algorythmes dont tu ne te serviras jamais et un beau jours, tu vas chercher a faire un générateur de labyrinthe, et tu n'auras pas la réponse dedans (linux mag n°62) Pour moi, tu dois prendre un exemple a qqn et chercher a l'optimiser, ou alors a faire comme lui...
        Je ne penses vraiment pas que tu ai besoin d'un livre pour apprendre quelquechose d'aussi vaste par la reflexion, mais restreint par le nombre de mots clefs utilisés que l'algorythmique... c'est pour cette raison que j'ai reposté mon code.
        Tu vas te faire chier en lisant ça... Tu verras toujours les mêmes mots clefs : if fo do while malloc realoc ect... rien de pasionnant, pour moi, l'achat d'un livre ne sert nullement dans ce cas la, mais peut servir pour aprendre a utiliser une librairie comme SDL, car c'est bcp plus vaste dans les fonctions...

        Pour ce que qqn a dit sur cppfrance, c'est vrai qu'ils sont un peu orienté windows, car le réseau est né avec vbfrance... Mais il y a énormément de codes sources qui n'utilisent que les librairies standar ! Bcp de programmes qui sont orientés linux ! Ils ont même fait une catégorie apps linux si je me souviens bien (je n'y ai rien mis car ce que je fais ne peut pas être considéré comme une apps a part entière...) Ce site passe très bien avec mozilla 1.4.

        Voila, c'est tout ce que j'avais a dire, lis des codes et ouvre Kwrite, compile et teste, mais lis pas ça, c'est peut-êtres très interessant, mais pour des trucs ou t'es déja a la masse en math, pas pour des trucs simples... Pour des test de miler-rabin, pour des DES RSA AES compression JPG Huffman ect...
        • [^] # Commentaire supprimé

          Posté par  . Évalué à 2.

          Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: mon code :

            Posté par  . Évalué à -1.

            J'ai 15 ans, j'ai créé un jeu de poker en javascript, on peut trier ces cartes, mélanger un jeu... ect...
            Vous avez des fonctions dans math.h, pour ça, moi, je les ai pas utilisé pour la satisfaction d'avoir tout fais seul dans son code... Donc, le tris, je l'ai fais seul, ety c'est simple, j'ai pas mios 15 ans pour trouver.
            On met 15 ans pour trouver des techniques de cryptographie, mais pas pourdes fonctions aussi simple que rechercher remplacer...

            Chemin le plus cours, c'est ni plus ni moins le même problème que celui expliqué dans le linux mag n°62... Générateur de labyrinthe, vous pouvez créer le même style de truc pour ça, prèsque aussi facilement, sans livre!

            Enfin, voila, quand un algo parait interessant dans le linux mag, je l'achète, mais j'irais pas acheter un livre pour ça, c'est bcp trop simple

            a=0;
            boucle de 0 au nombre de caractère du fichier
            {
            a augmente de 1
            verif=0
            b=0
            boucle de 0 au nombre de caractère de la chaine a chercher{
            b augmente de 1
            si fichier[a+b]=chaine_a_remplacer[b] alors verif augmente de 1
            }
            si verif = la taille de la chaine a remplacer alors on a la chaine a partir du caractère a
            }


            Vous ne me ferez pas croire que pour rechercher du texte dans un fichier, c'est compliqué...
            Pour remplacer, on a juste a ajouter quelques lignes pour décaler les caractères et remplacer les caractères...
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 1.

              Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Re: mon code :

              Posté par  (site web personnel) . Évalué à 2.



              a=0;

              boucle de 0 au nombre de caractère du fichier

              {

              a augmente de 1

              verif=0

              b=0

              boucle de 0 au nombre de caractère de la chaine a chercher{

              b augmente de 1

              si fichier[a+b]=chaine_a_remplacer[b] alors verif augmente de 1

              }

              si verif = la taille de la chaine a remplacer alors on a la chaine a partir du caractère a

              }



              A mon avis vu le nombre d'algo sur cette page pour le string matching merci à alenvers pour m'avoir donner le terme (http://linuxfr.org/comments/450024.html#450024(...))

              http://www-igm.univ-mlv.fr/~lecroq/string/index.html(...)
              Il y'en a 36, donc je ne pense pas que ton code soit le plus optimisé. ça ne t'interesse pas de savoir pourquoi ?

              Tu n'a pas mis 15 ans à trouver ton algo, on ne peut pas dire que tu ai perdu du temp en le recherchant par toi meme mais si tu veut par ler de cette fonction, comment va tu connaitre les termes. Comment va tu savoir là ou le bas blesse.
            • [^] # Re: mon code :

              Posté par  . Évalué à 1.

              Mouah ah ah ah ;-)
              Trop fort !
              Bon, je ne devrais pas moquer car tu sembles de bonne foi.
              Juste par curiosité, jettes un jour un coup d'oeil sur le bouquin "Algorithmique du texte" (http://www-igm.univ-mlv.fr/~mac/CHL/CHL.html(...)), ou encore sur un des volumes du TAOCP (The Art Of Computer Programming). Et tu verras que les algorithmes de base que l'on peut trouver soi-même sont souvent gourmand en temps (mais bon, je suppose que tu n'as pas programmé d'application critique, cela reste de petit soft faisant un seul truc, bref, des softs faisant partie de ta boîte à outil perso, ou le temps d'exécution n'est pas crucial), et l'on rentre dans les domaines assez compliqué quand on veut un truc efficace.
          • [^] # vocabulaire

            Posté par  (site web personnel) . Évalué à 2.

            Dans les trucs absolument indispensables qu'on ne sort pas comme ça de son nez sont :
            - les tris ;
            - les arbres de tri ;
            - les hash tables ;
            - les tas ;
            - Quelques algorithmes sur les graphes (Différents parcours, chemins les plus courts, etc.) ;


            Rien que d'avoir ce vocabulaire, ça ne se trouve pas comme ça.
            • [^] # Commentaire supprimé

              Posté par  . Évalué à 1.

              Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: mon code :

          Posté par  (site web personnel) . Évalué à 2.

          j'ai 15 ans, j'ai fais un programme de crypto RSA, un programme pour obtennir des nombres premiers, des nombres parfaits, de la stéganographie ect...


          Comme tout le monde... On c'est tous fait chier en cours de maths/philo

          c'est juste une question de bon sens de recherche sur internet


          je n'ai pas d'acces personnel à internet et j'aime le support papier.


          Je suis gloablement d'accord avec toi mais comme le dis alenvers (http://linuxfr.org/comments/450752.html#450752(...)) certains algorithmes ont mis des années à arriver. et encore, je ne te parle pas de l'implementation...
          Il peut etre interessant de comprendre la demarche qui les a amené à ce resultat.

          Recopier des programme de recherche de nombre premier (ou les concevoir ) on l'a tous fait. On est tous passé par là. mais il n'y a que certaines personnes qui ont eu l'idée de le faire plus rapidement.
  • # Commentaire supprimé

    Posté par  . Évalué à 1.

    Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.