{"id":2374,"date":"2019-12-08T23:26:56","date_gmt":"2019-12-08T20:26:56","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2374"},"modified":"2024-12-16T22:32:32","modified_gmt":"2024-12-16T19:32:32","slug":"binary-search","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2019\/12\/08\/binary-search\/","title":{"rendered":"Recherche binaire"},"content":{"rendered":"<p>Supposons que nous ayons besoin de savoir si l&#8217;adresse e-mail \u00ab\u00a0<a href=\"mailto:demensdeum@gmail.com\">demensdeum@gmail.com<\/a>\u00a0\u00bb est incluse dans la liste des adresses e-mail autoris\u00e9es pour la r\u00e9ception de lettres. .<\/p>\n<p>Parcourons toute la liste du premier au dernier \u00e9l\u00e9ment, en v\u00e9rifiant si l&#8217;\u00e9l\u00e9ment est \u00e9gal \u00e0 l&#8217;adresse sp\u00e9cifi\u00e9e &#8211; Impl\u00e9mentons un algorithme de recherche lin\u00e9aire. Mais cela prendra beaucoup de temps, n&#8217;est-ce pas\u00a0?<\/p>\n<p>Pour r\u00e9pondre \u00e0 cette question, utilisez la notation \u00ab Complexit\u00e9 temporelle des algorithmes \u00bb, \u00ab O \u00bb. Le temps de fonctionnement de la recherche lin\u00e9aire dans le pire des cas est \u00e9gal au ni\u00e8me nombre d&#8217;\u00e9l\u00e9ments du tableau, \u00e9crivons cela en notation \u00ab O \u00bb &#8211; Sur). Ensuite, nous devons expliquer que pour tout algorithme connu, il existe trois indicateurs de performance : temps d&#8217;ex\u00e9cution dans le meilleur des cas, le pire des cas et la moyenne. Par exemple, l&#8217;adresse mail \u00ab <a href=\"mailto:demensdeum@gmail.com\">demensdeum@gmail.com<\/a> \u00bb est dans le premier index du tableau, elle sera alors trouv\u00e9e dans la premi\u00e8re \u00e9tape de l&#8217;algorithme, il s&#8217;ensuit que le temps d&#8217;ex\u00e9cution est au mieux &#8211; O(1); et si \u00e0 la fin de la liste, alors c&#8217;est le pire des cas &#8211; O(n)<\/p>\n<p><a href=\"http:\/\/www.peakpx.com\/485573\/yellow-and-black-road-sign\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2387\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1.jpg\" alt=\"\" width=\"320\" height=\"240\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1.jpg 320w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Mais qu&#8217;en est-il des d\u00e9tails de la mise en \u0153uvre logicielle et des performances mat\u00e9rielles\u00a0? Ils devraient influencer Big O\u00a0? Maintenant, respirez et imaginez que le calcul de la complexit\u00e9 temporelle soit calcul\u00e9 pour une machine id\u00e9ale abstraite, dans laquelle il n&#8217;y a que cet algorithme et rien d&#8217;autre.<\/p>\n<h3>Algorithme<\/h3>\n<p>Ok, il s&#8217;av\u00e8re que la recherche lin\u00e9aire est assez lente, essayons d&#8217;utiliser la recherche binaire. Pour commencer, il convient de pr\u00e9ciser que nous ne travaillerons pas avec des donn\u00e9es binaires ; ce nom a \u00e9t\u00e9 donn\u00e9 \u00e0 cette m\u00e9thode en raison des particularit\u00e9s de son travail. Initialement, nous trions le tableau en <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1% 80%D0% B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F% D0%B4%D0%BE%D0%BA\" target=\"_blank\" rel=\"noopener\">ordre lexicographique<\/a>, puis l&#8217;algorithme prend la plage de l&#8217;ensemble du tableau, obtient l&#8217;\u00e9l\u00e9ment central de la plage, le compare <a href=\"https:\/\/ru.stackoverflow.com\/questions\/489888\/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5 -% D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1% 87%D0%B5%D1%81%D0%BA%D0%BE%D0 %B5-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%87% D1%82%D0%BE-%D0%BE%D0%BD%D0%BE- %D1%81%D0%BE%D0%B1%D0%BE%D0%B9-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0% D0%B2%D0%BB%D1%8F%D0%B5%D1%82\" target=\"_blank\" rel=\"noopener\">lexicographiquement<\/a>, et en fonction du r\u00e9sultat de la comparaison, d\u00e9cide quelle plage utiliser pour poursuivre la recherche &#8211; la moiti\u00e9 sup\u00e9rieure du courant ou la moiti\u00e9 inf\u00e9rieure. Autrement dit, \u00e0 chaque \u00e9tape de recherche, une d\u00e9cision est prise parmi deux options possibles\u00a0: logique binaire. Cette \u00e9tape est r\u00e9p\u00e9t\u00e9e jusqu&#8217;\u00e0 ce que le mot soit trouv\u00e9 ou non (l&#8217;intersection des indices inf\u00e9rieur et sup\u00e9rieur de la plage se produit).<\/p>\n<p>Performances de cet algorithme &#8211; le meilleur des cas est lorsqu&#8217;un \u00e9l\u00e9ment est imm\u00e9diatement trouv\u00e9 au milieu du tableau O(1), le pire des cas d&#8217;\u00e9num\u00e9ration est O(log n)<\/p>\n<h3>Pi\u00e8ges<\/h3>\n<p>Lors de l&#8217;impl\u00e9mentation de la recherche binaire, j&#8217;ai non seulement rencontr\u00e9 le probl\u00e8me int\u00e9ressant du <b>manque de standardisation de la comparaison lexicographique<\/b> dans les biblioth\u00e8ques de langages de programmation, mais j&#8217;ai m\u00eame d\u00e9couvert l&#8217;absence d&#8217;un <b>standard unifi\u00e9 pour l&#8217;impl\u00e9mentation localeCompare dans JavaScript<\/b>. La norme ECMAScript permet diff\u00e9rentes impl\u00e9mentations de cette fonction, c&#8217;est pourquoi lors du tri \u00e0 l&#8217;aide de localeCompare, des r\u00e9sultats compl\u00e8tement diff\u00e9rents peuvent \u00eatre observ\u00e9s sur diff\u00e9rents moteurs JavaScript.<\/p>\n<p>Par cons\u00e9quent, pour que l&#8217;algorithme fonctionne correctement, il faut <b>trier et utiliser uniquement le m\u00eame<\/b> algorithme de comparaison lexicographique, sinon rien ne fonctionnera. Co-mais si, par exemple, vous essayez de trier un tableau dans Scala et d&#8217;effectuer une recherche \u00e0 l&#8217;aide de nodejs, sans impl\u00e9menter votre propre tri\/tri d&#8217;une impl\u00e9mentation, alors rien ne vous attend sauf une d\u00e9ception humaine.<\/p>\n<h3>Sources<\/h3>\n<p><a href=\"https:\/\/ru.stackoverflow.com\/questions\/489888\/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5 -% D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1% 87%D0%B5%D1%81%D0%BA%D0%BE%D0 %B5-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%87% D1%82%D0%BE-%D0%BE%D0%BD%D0%BE- %D1%81%D0%BE%D0%B1%D0%BE%D0%B9-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0% D0%B2%D0%BB%D1%8F%D0%B5%D1%82\" target=\"_blank\" rel=\"noopener\">Qu&#8217;est-ce que la comparaison lexicographique et que repr\u00e9sente-t-elle ?<\/a><br \/><a href=\"https:\/\/ru.stackoverflow.com\/questions\/794557\/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%B4%D0%BB%D1%8F-%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D1%81%D1%8F-log-n-%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE-lb-n\" target=\"_blank\" rel=\"noopener\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f log N \u0432\u043c\u0435\u0441\u0442\u043e lb N?<\/a><br \/>\n<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA\" target=\"_blank\" rel=\"noopener\">\u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a<\/a><br \/>\n<a href=\"https:\/\/habr.com\/ru\/post\/188010\/\" target=\"_blank\" rel=\"noopener\">\u0417\u043d\u0430\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/52941016\/sorting-in-localecompare-in-javascript\" target=\"_blank\" rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/52941016\/sorting-in-localecompare-in-javascript<\/a><\/p>\n<h3>Code source<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/algorithms\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/algorithms<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Supposons que nous ayons besoin de savoir si l&#8217;adresse e-mail \u00ab\u00a0demensdeum@gmail.com\u00a0\u00bb est incluse dans la liste des adresses e-mail autoris\u00e9es pour la r\u00e9ception de lettres. . Parcourons toute la liste du premier au dernier \u00e9l\u00e9ment, en v\u00e9rifiant si l&#8217;\u00e9l\u00e9ment est \u00e9gal \u00e0 l&#8217;adresse sp\u00e9cifi\u00e9e &#8211; Impl\u00e9mentons un algorithme de recherche lin\u00e9aire. Mais cela prendra beaucoup<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/12\/08\/binary-search\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Recherche binaire&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[131,132],"class_list":["post-2374","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-algorithms","tag-binary-search","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"fr","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=2374"}],"version-history":[{"count":19,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2374\/revisions"}],"predecessor-version":[{"id":3931,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2374\/revisions\/3931"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}