Recherche dichotomique dans un tableau - Algorithme & programme Python

Поділитися
Вставка
  • Опубліковано 21 гру 2024

КОМЕНТАРІ •

  • @MohamedChiny
    @MohamedChiny  3 роки тому +4

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

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

  • @lightivandambys2834
    @lightivandambys2834 4 роки тому +3

    Merci encore ! Très instructif et claire.

    • @MohamedChiny
      @MohamedChiny  4 роки тому +1

      De rien. Merci pour votre commentaire :)

  • @anisbeng1972
    @anisbeng1972 3 роки тому +3

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

    • @MohamedChiny
      @MohamedChiny  3 роки тому +2

      Amine. Merci pour votre commentaire Ssi Anis :)

  • @abouhaifan3260
    @abouhaifan3260 2 роки тому +1

    Merci beaucoup vraiment 🙏

    • @MohamedChiny
      @MohamedChiny  2 роки тому

      De rien. Merci pour votre commentaire :)

  • @cBrvms
    @cBrvms 3 роки тому +2

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

    • @MohamedChiny
      @MohamedChiny  3 роки тому

      De rien. Merci pour votre commentaire :)

  • @flight7218
    @flight7218 11 місяців тому +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

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

  • @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é: ua-cam.com/video/HMKsnbWWNIc/v-deo.html
      Bonne chance :)

    • @fatimaezzahrabekkal3835
      @fatimaezzahrabekkal3835 Рік тому +1

      @@MohamedChiny je vous remercie beaucoup Monsieur.

    • @MohamedChiny
      @MohamedChiny  Рік тому

      @@fatimaezzahrabekkal3835 De rien :)

  • @smithadam
    @smithadam 4 роки тому +1

    merci beaucoup

    • @MohamedChiny
      @MohamedChiny  4 роки тому

      De rien. Merci pour votre commentaire :)

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

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

  • @mondherkhlifa6542
    @mondherkhlifa6542 3 роки тому +1

    excellent

  • @habibpavilion772
    @habibpavilion772 4 роки тому +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  4 роки тому

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

  • @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 7 місяців тому +2

    the best

  • @flight7218
    @flight7218 7 місяців тому +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

  • @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 🙏

  • @najwasla5139
    @najwasla5139 3 роки тому +1

    Merci beaucoup

    • @MohamedChiny
      @MohamedChiny  3 роки тому

      De rien. Merci pour votre commentaire :)

  • @angebangala4432
    @angebangala4432 2 роки тому +1

    Merci beaucoup

    • @MohamedChiny
      @MohamedChiny  2 роки тому +1

      De rien. Merci pour votre commentaire :)