video sympa , j'ai fait un equivalent sur excel vba : Sub recherche() Dim u() As Variant t = Array(10, 15, 19, 23, 32, 65, 68, 99) cible = 64 Do
m = Int(UBound(t) / 2) If cible > Val(t(m)) Then k = 0 For j = m + 1 To UBound(t) ReDim Preserve u(0 To k) u(k) = t(j) k = k + 1 Next Else k = 0 For j = 0 To m ReDim Preserve u(0 To k) u(k) = t(j) k = k + 1 Next End If t = u
Loop Until UBound(t) = 0 If cible = t(UBound(t)) Then MsgBox "la valeur cherchée est présente dans le tableau" Else MsgBox "la valeur cherchée n'est pas présente dans le tableau" End If
C'est le même principe. Il suffit d'ajouter une autre boucle avec le même traitement pour agir sur la deuxième dimension du tableau (matrice). Même si, en principe, la recherche dichotomique se fait souvent sur une seule dimension (tableau à une dimension ou liste). Bonne chance :)
et si cet élément dont on recherche est repété autant de fois dans notre tableau d'entiers et qu'à chaque fois qu'il est retrouvé par la boucle "Pour" qui va parcourir les entiers de ce tableau on veut récupérer son indice, comment on fait ?
A la base, la dichotomie s'applique sur les éléments uniques et triés. Mais si jamais vous êtes confrontés à ce problème, alors vous pouvez adopter une approche hybride (dichotomique et séquentielles en même temps). Autrement dit, vous cherchez votre élément par dichotomie, une fois trouvé, vous avancez (et vous reculez) d'une position de manière successive afin de voir si le même élément figure dans le voisinage.
Il suffit que vous remplaciez la boucle principale par une fonction récursive. Il n'y aura pas beaucoup de modifs à faire. Voilà le tuto sur la récursivité: th-cam.com/video/HMKsnbWWNIc/w-d-xo.html Bonne chance :)
Il est préférable d'être à l'aise avec toutes les notions vues en cours avant de se lancer dans les exercices, car ces derniers englobent des fois plusieurs notions en même temps (conditions, boucles, tableaux...). Sinon il est toujours possible d'altérner entre les cours et les exercices.Bonne chance :)
Que pensez vous de cet algorithme de recherche dichotomique qui est beaucoup plus rapide que celui présenté dans la vidéo ? #include #include void afficher(int T[],int n); void remplir(int T[],int n); void tri_selection_max(int A[],int N); void insertion(int A[],int *N); int recherche_dichotomie(int A[],int N,int VAL); int main() { int tableau[20]; int N; do { printf("Veuillez saisir un nombre d'elements du tableau inferieur ou egal a 20: "); scanf("%d", &N ); } while((N>20)||(N
Très bonne solution. J'avoue que j'ai déjà passé plus de 3h sur le même problème. Sauf que dans mon cas je remplace directement les valeurs des index trouvés, et pour ça je m'étais surtout basé sur le côté performance de l'algo du coup j'ai eu recours aux booléen indexing à l'intérieur des listes compréhensions. Et ça a plutôt marché pendant un moment mais je retombe toujours sur le même problème de performance lorsqu'il s'agit d'appliquer cette méthode dans des datasets très conséquent et jusqu'à now pas de solution. Du coup je voulais savoir si tu connaissais un moyen plus optimisé que celui-ci 😊! Même si ça implique de manipuler directement les generators.
Normalement, en utilisant Pandas, on peut manipuler les grosses tables (matrices) sans se soucier des performances, car Pandas est fondé sur Numpy qui est considéré comme l'une des meilleurs bibliothèques qui manipulent les matrices de grandes taille. Quand est ce que les performances sont mises en péril, c'est quand on crée notre prore fonction que nous applons via des itérations (ou via une liste compréhension), celà augmente considérablement le temps de traitement et met en rude épreuve le processeur.
@@MohamedChiny En effet, et je travaille souvent avec les technologies Numpy et Scipy mais lorsque je suis sur un problème de machine Learning ou statistique avancée mais dans ce cas précis il s'agit tout simplement d'une application web de gestion. Et bien qu'elle utilise énormément des données, j'ai estimé ça inutile de recourir à des technologies avancées. Mais merci quand même ! En fait, désolé de t'embêter avec mes problèmes perso, mais j'ai remarqué que ton mode de raisonnement algorithmique est beaucoup plus avancé et je voulais savoir si tu peux m'aider sur un truc: Je travaille actuellement sur un projet de cognition avancée basé dans la recherche comportementale chez un individu plus ou moins dangereux. L'idée c'est de créer un programme capable d'analyser le comportement agressif d'un être humain à partir des indices synergologiques. Du coup, j'ai à peu près la plupart des données nécessaires sur une grande matrice qui contient à son tour des sous matrices. Par exemple : A référence une matrice qui contient [[0:n], [1:n],[2:n]...] mais chaque indice référence aussi une matrice à son tour, bref je crois que tu comprends le principe. Et je voulais ressortir des priorités basées sur la classification d'éléments. Mais j'ai problème au niveau de trie de ces éléments. J'ai utilisé le tri fusion sur la matrice initiale et non sur des parties connues à l'avance mais en fonction de la taille de features. Et lorsque je fusionne toutes les parties finales les priorités d'éléments s'appliquent sur chacune des sous parties mais pas à la matrice mère. Du coup je voulais savoir si t'aurai une idée sur comment au lieu de trier chacune des sous partie, faire le trie par récursivité à partir de la matrice initiale. 😊
@@deepcode8963 Vous voulez trier votre matrice en suivant les lignes ou les colones? En tout cas, bien qu'il s'agit d'une application Web, il ne faut pas envisager le traitement en utilisant Python natif, car le problème fait partie du domaine du machine learning, donc le volume de données est très grand, ce qui risque d'alourdir le traitement, sans oublier que ça se passe sur le web qui, naturellement, génère une latence supplémentaire. Je pense qu'il serait mieux d'utiliser les bibliothèques spécialisées dans ce domaine. Si vous avez suivi mes cours de Web vous comprendrez certainement que je n'aime pas utiliser les bibliothèques (frameworks), et je code tout par moi même. Mais quand il s'agit de machine learning, il faut changer d'attitude car on ne peut pas privillégier l'authenticité (code natif) à la performance. C'est ce que je pense en tout cas :)
amusant à ecrire , je l'ai fait en excel vba , ca donne ceci : Function rech_dich(t As Variant, cible As Double, debut As Integer, fin As Integer) As String m = Int((debut + fin) / 2) If t(m) = cible Then rech_dich = "valeur trouvée au rang r=" & m ElseIf debut > fin Then rech_dich = "valeur non trouvée dans ce tableau" Else If t(m) < cible Then rech_dich = rech_dich(t, cible, m + 1, fin) End If If t(m) > cible Then rech_dich = rech_dich(t, cible, debut, m - 1) fin = m - 1 End If End If
End Function Sub TRUJ() t = Array(10, 15, 19, 23, 32, 65, 68, 99) Dim cible As Double cible = 65 MsgBox rech_dich(t, cible, LBound(t), UBound(t)) End Sub
bonjour merci pour le contenu très riche que vous mettez à notre disposition. pouvez vous m'orienter un peu sur ce qui a provoquer le passage de la variable bolléenne de l'état faux à l'état vrai? puisque vous avez directement enumerez les deux cas vers la fin. merci
Vous parlez du programme Python je pense. A la ligne 17 la syntaxe if trouve: est équivalente à if trouve==True: Donc on préfère écrire moins de code vu que ça signifie la même chose. Et si vous parlez du pseudo-code (algorithme), alors trouve a été initiailsée à Faux pour dire que l'élément recherché n'a pas encore été trouvé. Une fois ce dernier aura été trouvé on change trouve de Faux à Vrai. Comme ça, à la sortie de la boucle on saura quel message écrire selon la valeur qui a été affectée à trouve. J'espère que c'est ça votre question :)
j'ai un peut de mal à comprendre la ligne while deb = fin: Quelquechose doit m'échapper ^^ Si quelqun peut prendre le temp de m'expliquer j'en serai ravi :)
Vous avez un problème de langue? Si c'est le cas je vous conseille de perfectionner votre langue (français et anglais) car c'est ce qui est demandé dans le marché de l'emploi, surtout dans le domaine technique. En tout cas, il y a plein de chaines qui expliquent le contenu en arabe si vous voulez suivre leurs vidéos. Bonne chance.
Pour plus de cours, rendez-vous sur chiny.me
Simple comme bonjour grâce à ta vidéo, tu as résumé le chapitre en 10min, Merci !
De rien. Je suis content que cette vidéo vous ait plu. Merci pour votre commentaire :)
video sympa , j'ai fait un equivalent sur excel vba : Sub recherche()
Dim u() As Variant
t = Array(10, 15, 19, 23, 32, 65, 68, 99)
cible = 64
Do
m = Int(UBound(t) / 2)
If cible > Val(t(m)) Then
k = 0
For j = m + 1 To UBound(t)
ReDim Preserve u(0 To k)
u(k) = t(j)
k = k + 1
Next
Else
k = 0
For j = 0 To m
ReDim Preserve u(0 To k)
u(k) = t(j)
k = k + 1
Next
End If
t = u
Loop Until UBound(t) = 0
If cible = t(UBound(t)) Then
MsgBox "la valeur cherchée est présente dans le tableau"
Else
MsgBox "la valeur cherchée n'est pas présente dans le tableau"
End If
Magnifique, bravo :)
Ecrire ('vous avez fait un excellent travail, j'apprécie énormément')
Merci beaucoup pour votre compliment. J'apprécie énormément :)
Merci encore ! Très instructif et claire.
De rien. Merci pour votre commentaire :)
بارك الله فيك 🔥♥💪
Amine. Merci pour votre commentaire Ssi Anis :)
Merci beaucoup vraiment 🙏
De rien. Merci pour votre commentaire :)
j'ai a peu près compri merci super video
De rien. Merci pour votre commentaire :)
S'il vous plaît
Et comment pour la recherche dechotomique dans une matrice ?
Merci
C'est le même principe. Il suffit d'ajouter une autre boucle avec le même traitement pour agir sur la deuxième dimension du tableau (matrice). Même si, en principe, la recherche dichotomique se fait souvent sur une seule dimension (tableau à une dimension ou liste). Bonne chance :)
et si cet élément dont on recherche est repété autant de fois dans notre tableau d'entiers et qu'à chaque fois qu'il est retrouvé par la boucle "Pour" qui va parcourir les entiers de ce tableau on veut récupérer son indice, comment on fait ?
A la base, la dichotomie s'applique sur les éléments uniques et triés. Mais si jamais vous êtes confrontés à ce problème, alors vous pouvez adopter une approche hybride (dichotomique et séquentielles en même temps). Autrement dit, vous cherchez votre élément par dichotomie, une fois trouvé, vous avancez (et vous reculez) d'une position de manière successive afin de voir si le même élément figure dans le voisinage.
S'il vous plaît pourriez vous m'indiquer comment faire de la récursivité dans les algorithmes de recherche
Il suffit que vous remplaciez la boucle principale par une fonction récursive. Il n'y aura pas beaucoup de modifs à faire.
Voilà le tuto sur la récursivité: th-cam.com/video/HMKsnbWWNIc/w-d-xo.html
Bonne chance :)
@@MohamedChiny je vous remercie beaucoup Monsieur.
@@fatimaezzahrabekkal3835 De rien :)
J’ai une question est ce qu’il faut regarde toute les vidéo puis faire les exercices ou chaque exercice et = a une vidéo ?
Il est préférable d'être à l'aise avec toutes les notions vues en cours avant de se lancer dans les exercices, car ces derniers englobent des fois plusieurs notions en même temps (conditions, boucles, tableaux...). Sinon il est toujours possible d'altérner entre les cours et les exercices.Bonne chance :)
@@MohamedChiny avez vous un serveur discord ou autres ... ?
@@hzrsquilll9877 Non je n'en ai pas. Si jamais vous voulez me contacter vous pouvez me laisser vos messages sur Facebook, je m'y rends régulièrement.
@@MohamedChiny votre Facebook : ?
@@hzrsquilll9877 mohamedchiny
Que pensez vous de cet algorithme de recherche dichotomique qui est beaucoup plus rapide que celui présenté dans la vidéo ?
#include
#include
void afficher(int T[],int n);
void remplir(int T[],int n);
void tri_selection_max(int A[],int N);
void insertion(int A[],int *N);
int recherche_dichotomie(int A[],int N,int VAL);
int main()
{
int tableau[20];
int N;
do
{
printf("Veuillez saisir un nombre d'elements du tableau inferieur ou egal a 20:
");
scanf("%d", &N );
}
while((N>20)||(N
Très bonne solution. J'avoue que j'ai déjà passé plus de 3h sur le même problème. Sauf que dans mon cas je remplace directement les valeurs des index trouvés, et pour ça je m'étais surtout basé sur le côté performance de l'algo du coup j'ai eu recours aux booléen indexing à l'intérieur des listes compréhensions. Et ça a plutôt marché pendant un moment mais je retombe toujours sur le même problème de performance lorsqu'il s'agit d'appliquer cette méthode dans des datasets très conséquent et jusqu'à now pas de solution. Du coup je voulais savoir si tu connaissais un moyen plus optimisé que celui-ci 😊! Même si ça implique de manipuler directement les generators.
Normalement, en utilisant Pandas, on peut manipuler les grosses tables (matrices) sans se soucier des performances, car Pandas est fondé sur Numpy qui est considéré comme l'une des meilleurs bibliothèques qui manipulent les matrices de grandes taille. Quand est ce que les performances sont mises en péril, c'est quand on crée notre prore fonction que nous applons via des itérations (ou via une liste compréhension), celà augmente considérablement le temps de traitement et met en rude épreuve le processeur.
@@MohamedChiny En effet, et je travaille souvent avec les technologies Numpy et Scipy mais lorsque je suis sur un problème de machine Learning ou statistique avancée mais dans ce cas précis il s'agit tout simplement d'une application web de gestion. Et bien qu'elle utilise énormément des données, j'ai estimé ça inutile de recourir à des technologies avancées. Mais merci quand même !
En fait, désolé de t'embêter avec mes problèmes perso, mais j'ai remarqué que ton mode de raisonnement algorithmique est beaucoup plus avancé et je voulais savoir si tu peux m'aider sur un truc:
Je travaille actuellement sur un projet de cognition avancée basé dans la recherche comportementale chez un individu plus ou moins dangereux. L'idée c'est de créer un programme capable d'analyser le comportement agressif d'un être humain à partir des indices synergologiques. Du coup, j'ai à peu près la plupart des données nécessaires sur une grande matrice qui contient à son tour des sous matrices. Par exemple : A référence une matrice qui contient [[0:n], [1:n],[2:n]...] mais chaque indice référence aussi une matrice à son tour, bref je crois que tu comprends le principe.
Et je voulais ressortir des priorités basées sur la classification d'éléments. Mais j'ai problème au niveau de trie de ces éléments. J'ai utilisé le tri fusion sur la matrice initiale et non sur des parties connues à l'avance mais en fonction de la taille de features. Et lorsque je fusionne toutes les parties finales les priorités d'éléments s'appliquent sur chacune des sous parties mais pas à la matrice mère. Du coup je voulais savoir si t'aurai une idée sur comment au lieu de trier chacune des sous partie, faire le trie par récursivité à partir de la matrice initiale. 😊
@@deepcode8963 Vous voulez trier votre matrice en suivant les lignes ou les colones? En tout cas, bien qu'il s'agit d'une application Web, il ne faut pas envisager le traitement en utilisant Python natif, car le problème fait partie du domaine du machine learning, donc le volume de données est très grand, ce qui risque d'alourdir le traitement, sans oublier que ça se passe sur le web qui, naturellement, génère une latence supplémentaire. Je pense qu'il serait mieux d'utiliser les bibliothèques spécialisées dans ce domaine.
Si vous avez suivi mes cours de Web vous comprendrez certainement que je n'aime pas utiliser les bibliothèques (frameworks), et je code tout par moi même. Mais quand il s'agit de machine learning, il faut changer d'attitude car on ne peut pas privillégier l'authenticité (code natif) à la performance. C'est ce que je pense en tout cas :)
@@MohamedChiny Merci de votre aide ! Je crois que ce problème là sera déjà résolu d'ici peu de temps 😃
@@deepcode8963 De rien. Bonne chance :)
amusant à ecrire , je l'ai fait en excel vba , ca donne ceci :
Function rech_dich(t As Variant, cible As Double, debut As Integer, fin As Integer) As String
m = Int((debut + fin) / 2)
If t(m) = cible Then
rech_dich = "valeur trouvée au rang r=" & m
ElseIf debut > fin Then
rech_dich = "valeur non trouvée dans ce tableau"
Else
If t(m) < cible Then
rech_dich = rech_dich(t, cible, m + 1, fin)
End If
If t(m) > cible Then
rech_dich = rech_dich(t, cible, debut, m - 1)
fin = m - 1
End If
End If
End Function
Sub TRUJ()
t = Array(10, 15, 19, 23, 32, 65, 68, 99)
Dim cible As Double
cible = 65
MsgBox rech_dich(t, cible, LBound(t), UBound(t))
End Sub
C'est bien. Bravo :)
bonjour
merci pour le contenu très riche que vous mettez à notre disposition.
pouvez vous m'orienter un peu sur ce qui a provoquer le passage de la variable bolléenne de l'état faux à l'état vrai? puisque vous avez directement enumerez les deux cas vers la fin.
merci
Vous parlez du programme Python je pense. A la ligne 17 la syntaxe if trouve: est équivalente à if trouve==True: Donc on préfère écrire moins de code vu que ça signifie la même chose. Et si vous parlez du pseudo-code (algorithme), alors trouve a été initiailsée à Faux pour dire que l'élément recherché n'a pas encore été trouvé. Une fois ce dernier aura été trouvé on change trouve de Faux à Vrai. Comme ça, à la sortie de la boucle on saura quel message écrire selon la valeur qui a été affectée à trouve. J'espère que c'est ça votre question :)
merci beaucoup
De rien. Merci pour votre commentaire :)
excellent
Merci pour votre compliment :)
the best
Merci :)
j'ai un peut de mal à comprendre la ligne
while deb = fin:
Quelquechose doit m'échapper ^^
Si quelqun peut prendre le temp de m'expliquer j'en serai ravi :)
La bonne condition est while deb
Bien
La prochen fois parle un peu en arabe siltopli
Vous avez un problème de langue? Si c'est le cas je vous conseille de perfectionner votre langue (français et anglais) car c'est ce qui est demandé dans le marché de l'emploi, surtout dans le domaine technique. En tout cas, il y a plein de chaines qui expliquent le contenu en arabe si vous voulez suivre leurs vidéos. Bonne chance.
Merci beaucoup vraiment 🙏
De rien. Merci à vous :)
Merci beaucoup
De rien. Merci pour votre commentaire :)
Merci beaucoup
De rien. Merci pour votre commentaire :)