Recherche dichotomique dans un tableau - Algorithme & programme Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ต.ค. 2024

ความคิดเห็น • 56

  • @MohamedChiny
    @MohamedChiny  3 ปีที่แล้ว +4

    Pour plus de cours, rendez-vous sur chiny.me

  • @Alexis54-66
    @Alexis54-66 2 ปีที่แล้ว +5

    Simple comme bonjour grâce à ta vidéo, tu as résumé le chapitre en 10min, Merci !

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว +1

      De rien. Je suis content que cette vidéo vous ait plu. Merci pour votre commentaire :)

  • @rahmarahma2136
    @rahmarahma2136 4 ปีที่แล้ว +3

    Ecrire ('vous avez fait un excellent travail, j'apprécie énormément')

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว +1

      Merci beaucoup pour votre compliment. J'apprécie énormément :)

  • @flight7218
    @flight7218 10 หลายเดือนก่อน +1

    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

    • @MohamedChiny
      @MohamedChiny  10 หลายเดือนก่อน

      Magnifique, bravo :)

  • @abouhaifan3260
    @abouhaifan3260 2 ปีที่แล้ว +1

    Merci beaucoup vraiment 🙏

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว

      De rien. Merci pour votre commentaire :)

  • @lightivandambys2834
    @lightivandambys2834 4 ปีที่แล้ว +3

    Merci encore ! Très instructif et claire.

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว +1

      De rien. Merci pour votre commentaire :)

  • @anisbeng1972
    @anisbeng1972 2 ปีที่แล้ว +3

    بارك الله فيك 🔥♥💪

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว +2

      Amine. Merci pour votre commentaire Ssi Anis :)

  • @cBrvms
    @cBrvms 2 ปีที่แล้ว +2

    j'ai a peu près compri merci super video

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว

      De rien. Merci pour votre commentaire :)

  • @angebangala4432
    @angebangala4432 2 ปีที่แล้ว +1

    Merci beaucoup

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว +1

      De rien. Merci pour votre commentaire :)

  • @deepcode8963
    @deepcode8963 4 ปีที่แล้ว +1

    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.

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว +1

      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.

    • @deepcode8963
      @deepcode8963 4 ปีที่แล้ว +1

      @@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. 😊

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว

      @@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 :)

    • @deepcode8963
      @deepcode8963 4 ปีที่แล้ว +1

      @@MohamedChiny Merci de votre aide ! Je crois que ce problème là sera déjà résolu d'ici peu de temps 😃

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว

      @@deepcode8963 De rien. Bonne chance :)

  • @flight7218
    @flight7218 6 หลายเดือนก่อน +1

    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

    • @MohamedChiny
      @MohamedChiny  5 หลายเดือนก่อน

      C'est bien. Bravo :)

  • @saraharibi8934
    @saraharibi8934 2 ปีที่แล้ว +1

    S'il vous plaît
    Et comment pour la recherche dechotomique dans une matrice ?
    Merci

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว +1

      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 :)

  • @habibpavilion772
    @habibpavilion772 3 ปีที่แล้ว +1

    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

    • @MohamedChiny
      @MohamedChiny  3 ปีที่แล้ว

      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 :)

  • @nibrasse3976
    @nibrasse3976 2 ปีที่แล้ว +1

    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 ?

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว

      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.

  • @fatimaezzahrabekkal3835
    @fatimaezzahrabekkal3835 ปีที่แล้ว +1

    S'il vous plaît pourriez vous m'indiquer comment faire de la récursivité dans les algorithmes de recherche

    • @MohamedChiny
      @MohamedChiny  ปีที่แล้ว

      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 :)

    • @fatimaezzahrabekkal3835
      @fatimaezzahrabekkal3835 ปีที่แล้ว +1

      @@MohamedChiny je vous remercie beaucoup Monsieur.

    • @MohamedChiny
      @MohamedChiny  ปีที่แล้ว

      @@fatimaezzahrabekkal3835 De rien :)

  • @hzrsquilll9877
    @hzrsquilll9877 4 ปีที่แล้ว +1

    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 ?

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว +1

      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 :)

    • @hzrsquilll9877
      @hzrsquilll9877 4 ปีที่แล้ว

      @@MohamedChiny avez vous un serveur discord ou autres ... ?

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว

      @@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.

    • @hzrsquilll9877
      @hzrsquilll9877 4 ปีที่แล้ว +1

      @@MohamedChiny votre Facebook : ?

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว +1

      @@hzrsquilll9877 mohamedchiny

  • @crypto5hedge619
    @crypto5hedge619 ปีที่แล้ว +1

    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

  • @chatmasteria
    @chatmasteria 5 หลายเดือนก่อน +2

    the best

  • @mondherkhlifa6542
    @mondherkhlifa6542 3 ปีที่แล้ว +1

    excellent

    • @MohamedChiny
      @MohamedChiny  3 ปีที่แล้ว

      Merci pour votre compliment :)

  • @delt4_frozen870
    @delt4_frozen870 2 ปีที่แล้ว +1

    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 :)

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว +1

      La bonne condition est while deb

  • @hibahiba-fe8kc
    @hibahiba-fe8kc 3 ปีที่แล้ว

    Bien
    La prochen fois parle un peu en arabe siltopli

    • @MohamedChiny
      @MohamedChiny  3 ปีที่แล้ว +1

      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.

  • @abouhaifan3260
    @abouhaifan3260 2 ปีที่แล้ว +1

    Merci beaucoup vraiment 🙏

    • @MohamedChiny
      @MohamedChiny  2 ปีที่แล้ว

      De rien. Merci à vous :)

  • @najwasla5139
    @najwasla5139 3 ปีที่แล้ว +1

    Merci beaucoup

    • @MohamedChiny
      @MohamedChiny  3 ปีที่แล้ว

      De rien. Merci pour votre commentaire :)

  • @smithadam
    @smithadam 4 ปีที่แล้ว +1

    merci beaucoup

    • @MohamedChiny
      @MohamedChiny  4 ปีที่แล้ว

      De rien. Merci pour votre commentaire :)