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:
- The Art of Computer Programming de Donald E. Knuth http://www.amazon.fr/exec/obidos/ASIN/0201038218/qid=1090418970/sr=(...) Que je n'arrive pas à trouver.
- Algorithmes en langage C : Cours et exercices de Robert Sedgewick http://www.amazon.fr/exec/obidos/ASIN/2100053310/qid=1090418417/br=(...)
- Que pensez vous de ce livre : Introduction à l'algorithmique : Cours et exercices de Cormen, Leiserson, Rivest http://www.amazon.fr/exec/obidos/ASIN/2100039229/ref=pd_sim_dp_1/40(...)
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 Fabien Penso (site web personnel, Mastodon) . Évalué à 2.
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 account . Évalué à 2.
Sinon, le TAOCP de D. Knuth se trouve sur alapage com
[^] # Re: Un livre
Posté par Fabien Penso (site web personnel, Mastodon) . Évalué à 2.
[^] # Re: Un livre
Posté par Juke (site web personnel) . Évalué à 2.
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.
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 coucou747 . Évalué à -1.
#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 coucou747 . Évalué à 0.
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 Juke (site web personnel) . Évalué à 2.
C'est sûr...
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 Juke (site web personnel) . Évalué à 2.
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 coucou747 . Évalué à 0.
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 Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: mon code :
Posté par coucou747 . Évalué à -1.
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
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 Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: mon code :
Posté par Juke (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 saorge . Évalué à 1.
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 Juke (site web personnel) . Évalué à 2.
Rien que d'avoir ce vocabulaire, ça ne se trouve pas comme ça.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: mon code :
Posté par Juke (site web personnel) . Évalué à 2.
Comme tout le monde... On c'est tous fait chier en cours de maths/philo
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 Anonyme . Évalué à 1.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: Algorithms, de Sedgewick
Posté par Juke (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.