Skip to content

Commit

Permalink
Creado con Colaboratory
Browse files Browse the repository at this point in the history
  • Loading branch information
alejandrofdzllorente committed Dec 22, 2020
1 parent f86f0a5 commit 56c9019
Showing 1 changed file with 253 additions and 1 deletion.
254 changes: 253 additions & 1 deletion Alejandro_Fernandez_AG1.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"collapsed_sections": [],
"toc_visible": true,
"mount_file_id": "1PMdtV_Nu8G6ehzMEML3qi1g-JLHuTfpa",
"authorship_tag": "ABX9TyPGl0cOdPPpw5GO5N2ZG4c8",
"authorship_tag": "ABX9TyOFqV96emfYUwvzI8TSlJeq",
"include_colab_link": true
},
"kernelspec": {
Expand Down Expand Up @@ -254,6 +254,258 @@
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "110kI03InvLg"
},
"source": [
"## Algoritmo de encontrar los dos puntos más cercanos\r\n",
"\r\n",
"(Subido al foro evaluable)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "MIYk9jEEn4Z0"
},
"source": [
"import math\r\n",
"import random\r\n",
"from time import time\r\n",
"import matplotlib.pyplot as plt\r\n",
"\r\n",
"#distanciaEuclídea\r\n",
"def distancia(p1,p2):\r\n",
" sum = 0\r\n",
" for i in range(0,len(p1)):\r\n",
" sum = sum + math.sqrt(pow(p1[i] - p2[i],2))\r\n",
" return sum\r\n",
"\r\n",
"def creaLista(dimension, elementos):\r\n",
" #creación de x listas\r\n",
" for i in range(0,elementos):\r\n",
" locals()['elementos' + str(i)] = [random.randint(0,1000) for _ in range(dimension)]\r\n",
" lista = []\r\n",
" #unión de las listas en una lista\r\n",
" for i in range(0,elementos):\r\n",
" lista.append(locals()['elementos' + str(i)])\r\n",
" return lista\r\n",
"\r\n",
"\r\n",
"def puntosMasCercanos(dimension, elementos):\r\n",
" #se crea la lista con la función anterior\r\n",
" lista = creaLista(dimension, elementos)\r\n",
" #valor de comienzo, lo más grande posible\r\n",
" minimo = float('inf')\r\n",
" cercanos = ()\r\n",
" puntos=()\r\n",
" #inicio del tiempo del experimentos\r\n",
" start_time = time()\r\n",
" #EXPERIMENTO\r\n",
" for i in range(0,elementos):\r\n",
" for j in range( i + 1, elementos):\r\n",
" if distancia(lista[i],lista[j]) < minimo:\r\n",
" minimo = distancia(lista[i],lista[j])\r\n",
" cercanos = (lista[i],lista[j])\r\n",
" puntos = (i,j)\r\n",
" #tiempo de ejecución del experimento\r\n",
" tiempo = time() - start_time \r\n",
" return [cercanos,puntos,tiempo]\r\n",
"\r\n",
"\r\n",
"# =============================================================================\r\n",
"#EXPERIMENTO\r\n",
"# =============================================================================\r\n",
"\r\n",
"#número de valores por cada punto\r\n",
"dimension = 5\r\n",
"#número de puntos de la lista\r\n",
"elementos = 200\r\n",
"\r\n",
"prueba = puntosMasCercanos(dimension, elementos)\r\n",
"\r\n",
"print(\"\")\r\n",
"print(\"Los puntos más cercanos son los que tienen como valor: \" + str(prueba[0]))\r\n",
"print(\"\")\r\n",
"print(\"Los puntos más cercanos son los de las posiciones: \" + str(prueba[1]))\r\n",
"print(\"\")\r\n",
"print(\"El tiempo de ejecución para una dimensión \"+ str(dimension) +\" y \" + str(elementos) + \" elementos ha sido : \" + str(prueba[2]))\r\n",
"print(\"\")\r\n",
"\r\n",
"\r\n",
"# =============================================================================\r\n",
"#PRUEBAS\r\n",
"# =============================================================================\r\n",
"\r\n",
"\r\n",
"\r\n",
"#prueba de subir elementos\r\n",
"prueba1 = [5,1]\r\n",
"prueba2 = [5,100]\r\n",
"prueba3 = [5,200]\r\n",
"prueba4 = [5,300]\r\n",
"prueba5 = [5,400]\r\n",
"prueba6 = [5,500]\r\n",
"prueba7 = [5,600]\r\n",
"prueba8 = [5,700]\r\n",
"prueba9 = [5,800]\r\n",
"prueba10 = [5,900]\r\n",
"\r\n",
"y = []\r\n",
"\r\n",
"for i in range (1,11):\r\n",
" locals()['resultados' + str(i)] = puntosMasCercanos(locals()['prueba' + str(i)][0], locals()['prueba' + str(i)][1])\r\n",
" y.append(locals()['resultados' + str(i)][2])\r\n",
" \r\n",
"plt.figure(figsize=(16,3))\r\n",
"plt.title('Crecimiento del tiempo subiendo el número de elementos en la lista')\r\n",
"plt.ylabel(\"Tiempo de ejecución\")\r\n",
"plt.plot(y)\r\n",
"plt.show() \r\n",
" \r\n",
" \r\n",
" \r\n",
"\r\n",
"#prueba de subir dimension\r\n",
"prueba1 = [1,5]\r\n",
"prueba2 = [100,5]\r\n",
"prueba3 = [200,5]\r\n",
"prueba4 = [300,5]\r\n",
"prueba5 = [400,5]\r\n",
"prueba6 = [500,5]\r\n",
"prueba7 = [600,5]\r\n",
"prueba8 = [700,5]\r\n",
"prueba9 = [800,5]\r\n",
"prueba10 = [900,5]\r\n",
"\r\n",
"y = []\r\n",
"\r\n",
"for i in range (1,11):\r\n",
" locals()['resultados' + str(i)] = puntosMasCercanos(locals()['prueba' + str(i)][0], locals()['prueba' + str(i)][1])\r\n",
" y.append(locals()['resultados' + str(i)][2])\r\n",
" \r\n",
"plt.figure(figsize=(16,3))\r\n",
"plt.title('Crecimiento del tiempo subiendo la dimensión la lista')\r\n",
"plt.ylabel(\"Tiempo de ejecución\")\r\n",
"plt.plot(y)\r\n",
"plt.show() \r\n",
" \r\n",
"\r\n",
"\r\n",
"#prueba de subir las dos\r\n",
"prueba1 = [1,1]\r\n",
"prueba2 = [50,50]\r\n",
"prueba3 = [100,100]\r\n",
"prueba4 = [150,150]\r\n",
"prueba5 = [200,200]\r\n",
"prueba6 = [250,250]\r\n",
"prueba7 = [300,300]\r\n",
"prueba8 = [350,350]\r\n",
"prueba9 = [450,450]\r\n",
"prueba10 = [500,500]\r\n",
"\r\n",
"y = []\r\n",
"\r\n",
"for i in range (1,11):\r\n",
" locals()['resultados' + str(i)] = puntosMasCercanos(locals()['prueba' + str(i)][0], locals()['prueba' + str(i)][1])\r\n",
" y.append(locals()['resultados' + str(i)][2])\r\n",
" \r\n",
"plt.figure(figsize=(16,3))\r\n",
"plt.title('Crecimiento del tiempo subiendo todo')\r\n",
"plt.ylabel(\"Tiempo de ejecución\")\r\n",
"plt.plot(y)\r\n",
"plt.show()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "ICvFO9yxr-iz"
},
"source": [
"Dado que ésta parte la subí al foro, he realizado un código que obtiene, con las misma bases configurables, los tres puntos más cercanos entre sí."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vo7i_2zzrAlh",
"outputId": "88476cab-d203-4fe9-c946-a80359045e11"
},
"source": [
"#distanciaEuclídea\r\n",
"def distancia(p1,p2,p3):\r\n",
" sum = 0\r\n",
" for i in range(0,len(p1)):\r\n",
" sum = sum + math.sqrt(pow(p1[i] - p2[i] - p3[i],2))\r\n",
" return sum\r\n",
"\r\n",
"\r\n",
"def tresPuntosMasCercanos(dimension, elementos):\r\n",
" if(elementos <= 3):\r\n",
" print(\"Se necesitan más de tres puntos\")\r\n",
" return\r\n",
" #se crea la lista con la función anterior\r\n",
" lista = creaLista(dimension, elementos)\r\n",
" #valor de comienzo, lo más grande posible\r\n",
" minimo = float('inf')\r\n",
" cercanos = ()\r\n",
" puntos=()\r\n",
" #inicio del tiempo del experimentos\r\n",
" start_time = time()\r\n",
" #EXPERIMENTO\r\n",
" for i in range(0,elementos):\r\n",
" for j in range( i + 1, elementos):\r\n",
" for k in range( j + 1, elementos):\r\n",
" if distancia(lista[i],lista[j],lista[k]) < minimo:\r\n",
" minimo = distancia(lista[i],lista[j],lista[k])\r\n",
" cercanos = (lista[i],lista[j],lista[k])\r\n",
" puntos = (i,j,k)\r\n",
" #tiempo de ejecución del experimento\r\n",
" tiempo = time() - start_time \r\n",
" return [cercanos,puntos,tiempo]\r\n",
"\r\n",
"\r\n",
"\r\n",
"#número de valores por cada punto\r\n",
"dimension = 5\r\n",
"#número de puntos de la lista\r\n",
"elementos = 200\r\n",
"\r\n",
"prueba = tresPuntosMasCercanos(dimension, elementos)\r\n",
"\r\n",
"print(\"\")\r\n",
"print(\"Los puntos más cercanos son los que tienen como valor: \" + str(prueba[0]))\r\n",
"print(\"\")\r\n",
"print(\"Los puntos más cercanos son los de las posiciones: \" + str(prueba[1]))\r\n",
"print(\"\")\r\n",
"print(\"El tiempo de ejecución para una dimensión \"+ str(dimension) +\" y \" + str(elementos) + \" elementos ha sido : \" + str(prueba[2]))\r\n",
"print(\"\")"
],
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"text": [
"\n",
"Los puntos más cercanos son los que tienen como valor: ([353, 514, 728, 723, 274], [194, 191, 689, 911, 75], [412, 193, 959, 644, 390])\n",
"\n",
"Los puntos más cercanos son los de las posiciones: (0, 2, 3)\n",
"\n",
"El tiempo de ejecución para una dimensión 5 y 4 elementos ha sido : 2.7179718017578125e-05\n",
"\n"
],
"name": "stdout"
}
]
}
]
}

0 comments on commit 56c9019

Please sign in to comment.