"le résultat est le nombre de secondes écoulée depuis le 1 janvier 1970.\n",
"\n",
"3. Pour mesurer le temps d'exécution, on enregistre le temps avant l'exécution de la fonction puis on faire la différente avec le temps après l'exécution.\n",
"\n",
"Combien de temps prend la commande `cherche([1, 7, 8, 3, 9, 3], 9)` à s'exécuter?"
"5. Le soucis de cette méthode est que l'on est pas à l'abris d'une liste \"facile\". Vous devez faire la même chose en calculant 5 fois le temps pour 5 listes différentes puis faire la moyenne des temps d'exécution. *(je vous encourage à programmer une fonction `moyenne` pour calculer cette moyenne)*"
"1. Progammer et tester la fonction `maximum` qui prend en argument une liste de liste de nombres et qui renvoie le plus grand élément parmi toutes les listes."
"La recherche par dichotomie permet de grandement améliorer la vitesse de recherche d'un élément dans un liste. **À condition que cette liste soit triée en ordre croissant**.\n",
"1. Chercher et expliquer la meilleur stratégie pour gagner [au jeu du plus ou moins](https://raw.opytex.org/1NSI/09_Recherche_par_dichotomie_et_complexite/plus_moins/plus_moins.html)"
]
},
{
"cell_type": "raw",
"id": "c78246e0",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "65cf15cd",
"metadata": {},
"source": [
"La résolution du jeux précédent est très similaire à la situation de recherche par dichotomie.\n",
"\n",
"2. Pour vous entrainé à la recherche par dichotomie, établir un algorithme qui permet de trouver en le moins de coup possible (en moyenne) un élément dans une liste triée. Pour tester votre stratégie vous pouvez utiliser [ce jeu]()."
]
},
{
"cell_type": "markdown",
"id": "a8b722a9",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "73ccf876",
"metadata": {},
"source": [
"3. On suppose maintenant que la liste `L = [x0, x1, . . . , x]` est triée en ordre croissant, c'est\n",
"à dire :\n",
" \n",
" x0 ⩽ x1 ⩽ · · · ⩽ xn\n",
" \n",
"On cherche parmi les éléments de `L` l'élément x.\n",
" \n",
"On désigne par `L[i..j]` les éléments de L dont les indices sont compris entre i (inclu) et j\n",
"(inclu). \n",
"\n",
"On suppose que parmi les éléments de `L[g..d]`, il y a un élément x. Et on considère un\n",
"indice m tel que g ⩽ m ⩽ d.\n",
"\n",
"Si L[m]<x, dans quelle nouvelle zone est-on sûr que x se trouve ?"
]
},
{
"cell_type": "raw",
"id": "bf3961fa",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "645c4300",
"metadata": {},
"source": [
"Si L[m]>x, dans quelle nouvelle zone est-on sûr que x se trouve ?"
]
},
{
"cell_type": "raw",
"id": "fb42b270",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "7c6f53e5",
"metadata": {},
"source": [
"Que peut-on affirmer si aucune des deux conditions précédentes n'est valide ?"
]
},
{
"cell_type": "raw",
"id": "d8cf7292",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "6d046b52",
"metadata": {},
"source": [
"4. Compléter le fonction suivante en respectant la spécification de la docstring"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "0afedcb2",
"metadata": {},
"outputs": [],
"source": [
"def dichotomie(L, x):\n",
" \"\"\" Renvoie un indice de l'élément x dans L si x est dedans, et renvoie None sinon\n",
" \n",
" On supposera que la liste L est triée en ordre croissant.\n",
" \"\"\"\n",
" g = 0\n",
" d = len(L)-1\n",
" while g <= l:\n",
" m = (g + d) // 2\n",
" if L[m] < x:\n",
" ...\n",
" elif L[m] > x:\n",
" ...\n",
" else:\n",
" ...\n",
" return None"
]
},
{
"cell_type": "markdown",
"id": "5e3bde1e",
"metadata": {},
"source": [
"5. Mesurer le temps d'exécution de votre fonction sur des listes avec 10, 100, 1000, 10000 et 100000 nombres."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "603757b0",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "6959bcfb",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "9a834ec6",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "f3e9a104",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "6093b13a",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "db5d9f35",
"metadata": {},
"source": [
"6. Reprendre la question précédente en faisant la moyenne des temps d'exécution sur 5 listes pour chaque taille."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "906ce312",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "69213d32",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "51e69361",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "d8d068cb",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "b3628a5f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "a6966564",
"metadata": {},
"source": [
"7. Tracer le graphique de la moyenne de temps d'exécution en fonction de la taille des listes."