Skip to content

Instantly share code, notes, and snippets.

@eduardoklosowski
Last active October 26, 2022 03:01
Show Gist options
  • Save eduardoklosowski/e7656d38bb93927734a147ca1ca3e250 to your computer and use it in GitHub Desktop.
Save eduardoklosowski/e7656d38bb93927734a147ca1ca3e250 to your computer and use it in GitHub Desktop.
Análise de desempenho de um código iterativo e recursivo para percorrer uma árvore binária
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"from scipy.stats import ttest_ind"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"dados = pd.read_csv('dados.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tempo de Execução"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot: title={'center': 'tempo'}, xlabel='codigo'>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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t2+HtbV1/a4EPXZ27twJAFAqldi6datUnp6eDgBQqVRSPW9v78bvIBE1usr9n5qX0tLSWtV7bO7S6tKlC7Kzs3Hz5k189913iIyMxK5du6oNPfHx8YiNjZWmNRoN3NzcEBISwktazcC5c+ewdetWaLVahIWFQafTIT09Hc888wwsLS2xevVqAMBTTz2FsLCwJu4tETWkB/d/al4qr/A8TIMHHhcXFxQWFhqUFRYWwt7eXjq7AwBWVlbSX+IBAQE4ePAgli9fjk8//bTKdpVKJZRKpVG5paUlP/DNwFtvvYVp06Zh1qxZeP3116VtbmlpCYVCgYSEBFhYWOCtt97i54GomeDv/+apttu8wb94MDAwEBkZGQZl6enpNY7PAQC9Xm8wRofoflZWVpgyZQoKCwvRvn17rF69GteuXcPq1avRvn17FBYWYsqUKRywTEREAB7hDM/t27dx7tw5aTo3NxfZ2dlo2bIlOnTogPj4eOTn5+PLL78EAEycOBErV65EXFwcXnvtNezcuRPffPMNtmzZIrURHx+PoUOHokOHDrh16xbWr1+PzMxMg1vXiR60cOFCAMDSpUvx5ptvSuUWFhZ45513pPlEREQmB55Dhw5hyJAh0nTlOJrIyEgkJyfj8uXLyMvLk+Z7eHhgy5YtmDJlCpYvXy79NR4aGirVKSoqQkREBC5fvgwHBwf07NkT27ZtwzPPPFOXdaNmYOHChfjggw+kb1p+6qmn+E3LRERkpE7fw/M44ffwNG/8Hg6i5ov7f/NW2+M/Hx5KREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyx8BDREREssfAQ0RERLLHwENERESyZ3Lg2b17N4YPHw5XV1coFAqkpqY+dJnMzEz07t0bSqUS3t7eSE5ONpifmJiIvn37ws7ODm3atMGIESNw+vRpU7tGREREVCWTA09JSQn8/PyQlJRUq/q5ubkYNmwYhgwZguzsbMTExGDc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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dados.boxplot(column='tempo', by='codigo')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ttest_indResult(statistic=3.431630246584823, pvalue=0.000730311020051685)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ttest_ind(\n",
" dados[dados['codigo'] == 'iterativo']['tempo'],\n",
" dados[dados['codigo'] == 'recursivo']['tempo'],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Memória"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot: title={'center': 'memoria'}, xlabel='codigo'>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dados.boxplot(column='memoria', by='codigo')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ttest_indResult(statistic=1.8265256339928038, pvalue=0.069276983164639)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ttest_ind(\n",
" dados[dados['codigo'] == 'iterativo']['memoria'],\n",
" dados[dados['codigo'] == 'recursivo']['memoria'],\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.2 ('env': venv)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "a5e19feff209c9181a7eab5875b7fc1c4326c3bb5cb4b40daae141a31756cb04"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
codigo tempo memoria
iterativo 1.03 32644
recursivo 0.99 32744
iterativo 0.98 32724
recursivo 0.99 32660
iterativo 0.97 32752
recursivo 0.97 32696
iterativo 0.96 32652
recursivo 0.96 32640
iterativo 0.98 32640
recursivo 0.98 32744
iterativo 0.97 32656
recursivo 0.97 32640
iterativo 0.97 32644
recursivo 0.97 32744
iterativo 0.98 32712
recursivo 0.97 32656
iterativo 0.99 32640
recursivo 0.99 32640
iterativo 0.99 32696
recursivo 0.96 32752
iterativo 0.97 32696
recursivo 0.97 32652
iterativo 0.96 32640
recursivo 0.96 32716
iterativo 0.96 32732
recursivo 0.97 32712
iterativo 0.97 32752
recursivo 0.97 32688
iterativo 0.96 32656
recursivo 0.96 32712
iterativo 0.97 32640
recursivo 0.95 32652
iterativo 0.97 32728
recursivo 0.95 32632
iterativo 0.97 32716
recursivo 0.97 32744
iterativo 0.98 32744
recursivo 0.97 32652
iterativo 0.97 32716
recursivo 0.97 32656
iterativo 0.99 32712
recursivo 0.99 32752
iterativo 0.99 32640
recursivo 0.99 32640
iterativo 1.00 32716
recursivo 1.00 32644
iterativo 0.99 32652
recursivo 0.98 32640
iterativo 0.98 32656
recursivo 0.97 32636
iterativo 0.98 32712
recursivo 0.98 32648
iterativo 0.97 32696
recursivo 0.98 32640
iterativo 0.99 32688
recursivo 0.97 32652
iterativo 0.99 32716
recursivo 0.99 32644
iterativo 0.98 32744
recursivo 0.97 32672
iterativo 0.97 32736
recursivo 0.96 32644
iterativo 0.98 32752
recursivo 0.98 32716
iterativo 0.98 32744
recursivo 0.98 32652
iterativo 0.99 32728
recursivo 0.98 32712
iterativo 0.97 32728
recursivo 0.97 32656
iterativo 0.97 32716
recursivo 0.96 32640
iterativo 0.97 32640
recursivo 0.97 32712
iterativo 0.97 32640
recursivo 0.96 32712
iterativo 0.97 32640
recursivo 0.96 32716
iterativo 0.96 32652
recursivo 0.96 32640
iterativo 0.96 32724
recursivo 0.96 32716
iterativo 0.97 32640
recursivo 0.96 32712
iterativo 0.98 32744
recursivo 0.98 32716
iterativo 0.98 32728
recursivo 0.98 32644
iterativo 0.99 32640
recursivo 0.99 32640
iterativo 0.99 32712
recursivo 0.97 32636
iterativo 0.97 32744
recursivo 0.98 32652
iterativo 0.97 32752
recursivo 0.97 32720
iterativo 0.98 32752
recursivo 0.98 32724
iterativo 0.98 32644
recursivo 0.98 32712
iterativo 0.98 32644
recursivo 0.97 32752
iterativo 0.98 32724
recursivo 0.97 32656
iterativo 0.98 32748
recursivo 0.97 32712
iterativo 0.98 32704
recursivo 0.98 32640
iterativo 0.98 32752
recursivo 0.98 32752
iterativo 0.98 32752
recursivo 0.96 32688
iterativo 0.97 32632
recursivo 0.96 32724
iterativo 0.96 32728
recursivo 0.96 32756
iterativo 0.97 32632
recursivo 0.96 32684
iterativo 0.97 32640
recursivo 0.96 32716
iterativo 0.96 32728
recursivo 0.96 32688
iterativo 0.96 32752
recursivo 0.96 32756
iterativo 0.96 32652
recursivo 0.96 32688
iterativo 0.96 32644
recursivo 0.97 32752
iterativo 0.99 32744
recursivo 0.99 32652
iterativo 1.03 32632
recursivo 0.98 32688
iterativo 0.99 32728
recursivo 0.98 32640
iterativo 1.00 32752
recursivo 0.98 32712
iterativo 0.98 32640
recursivo 0.97 32744
iterativo 0.99 32656
recursivo 0.99 32632
iterativo 0.99 32640
recursivo 0.97 32728
iterativo 0.97 32712
recursivo 0.97 32692
iterativo 0.98 32696
recursivo 0.97 32632
iterativo 0.98 32672
recursivo 0.99 32656
iterativo 0.98 32728
recursivo 0.97 32640
iterativo 0.99 32656
recursivo 0.99 32644
iterativo 1.00 32724
recursivo 0.99 32736
iterativo 1.00 32632
recursivo 0.99 32712
iterativo 1.00 32640
recursivo 0.99 32696
iterativo 1.00 32724
recursivo 1.00 32640
iterativo 1.00 32712
recursivo 0.99 32640
iterativo 0.99 32716
recursivo 0.97 32712
iterativo 0.99 32708
recursivo 0.97 32660
iterativo 0.99 32724
recursivo 0.98 32728
iterativo 0.99 32752
recursivo 0.97 32752
iterativo 0.98 32700
recursivo 0.97 32712
iterativo 0.98 32640
recursivo 0.99 32640
iterativo 1.00 32752
recursivo 0.99 32752
iterativo 0.99 32716
recursivo 0.97 32632
iterativo 0.97 32644
recursivo 0.96 32712
iterativo 0.97 32728
recursivo 0.96 32640
iterativo 0.96 32688
recursivo 0.96 32644
iterativo 0.96 32640
recursivo 0.96 32640
iterativo 0.97 32688
recursivo 0.96 32728
iterativo 0.97 32640
recursivo 0.96 32632
iterativo 0.97 32756
recursivo 0.96 32732
iterativo 0.96 32716
recursivo 0.96 32644
iterativo 0.98 32744
recursivo 0.96 32728
iterativo 0.97 32712
recursivo 0.97 32724
iterativo 0.99 32708
recursivo 0.99 32632
#include <stdio.h>
#include <stdlib.h>
struct No {
int valor;
struct No *esquerda, *direita;
};
struct No* No_new(int valor) {
struct No *no = (struct No*) malloc(sizeof(struct No));
if (!no) {
printf("Erro ao alocar nó\n");
exit(1);
}
no->valor = valor;
no->esquerda = NULL;
no->direita = NULL;
return no;
}
void No_add(struct No *self, int valor) {
if (valor < self->valor) {
if (self->esquerda) {
No_add(self->esquerda, valor);
} else {
self->esquerda = No_new(valor);
}
} else {
if (self->direita) {
No_add(self->direita, valor);
} else {
self->direita = No_new(valor);
}
}
}
struct No_print_stack_item {
struct No *no;
int etapa;
};
void No_print(struct No *self) {
int stack_pointer = 0;
struct No_print_stack_item stack[100];
stack[stack_pointer].no = self;
stack[stack_pointer].etapa = 0;
while (stack_pointer >= 0) {
struct No_print_stack_item *item = &stack[stack_pointer];
if (item->etapa == 0) {
item->etapa = 1;
if (item->no->esquerda) {
++stack_pointer;
stack[stack_pointer].no = item->no->esquerda;
stack[stack_pointer].etapa = 0;
}
} else {
printf(" %d", item->no->valor);
if (item->no->direita) {
item->no = item->no->direita;
item->etapa = 0;
} else {
--stack_pointer;
}
}
}
}
int main() {
FILE *file = fopen("numeros.txt", "r");
if (!file) {
printf("Erro ao abrir arquivo\n");
exit(1);
}
int valor;
if (fscanf(file, "%d", &valor) != 1) {
printf("Erro ao ler número\n");
exit(1);
}
struct No *no = No_new(valor);
while (fscanf(file, "%d", &valor) == 1) {
No_add(no, valor);
}
No_print(no);
printf("\n");
return 0;
}
CC=gcc
CFLAGS=-O3
.PHONY: all clean
all: dados.csv
numeros.txt: numeros.py
python3 $<
dados.csv: run.sh numeros.txt iterativo recursivo
bash $<
clean:
rm -rf numeros.txt iterativo recursivo dados.csv
from random import shuffle
n = list(range(1_000_000))
shuffle(n)
with open('numeros.txt', 'w') as f:
print('\n'.join(str(i) for i in n), file=f)
#include <stdio.h>
#include <stdlib.h>
struct No {
int valor;
struct No *esquerda, *direita;
};
struct No* No_new(int valor) {
struct No *no = (struct No*) malloc(sizeof(struct No));
if (!no) {
printf("Erro ao alocar nó\n");
exit(1);
}
no->valor = valor;
no->esquerda = NULL;
no->direita = NULL;
return no;
}
void No_add(struct No *self, int valor) {
if (valor < self->valor) {
if (self->esquerda) {
No_add(self->esquerda, valor);
} else {
self->esquerda = No_new(valor);
}
} else {
if (self->direita) {
No_add(self->direita, valor);
} else {
self->direita = No_new(valor);
}
}
}
void No_print(struct No *self) {
if (self->esquerda) No_print(self->esquerda);
printf(" %d", self->valor);
if (self->direita) No_print(self->direita);
}
int main() {
FILE *file = fopen("numeros.txt", "r");
if (!file) {
printf("Erro ao abrir arquivo\n");
exit(1);
}
int valor;
if (fscanf(file, "%d", &valor) != 1) {
printf("Erro ao ler número\n");
exit(1);
}
struct No *no = No_new(valor);
while (fscanf(file, "%d", &valor) == 1) {
No_add(no, valor);
}
No_print(no);
printf("\n");
return 0;
}
matplotlib==3.6.1
pandas==1.5.1
scipy==1.9.3
#!/bin/bash
EXECUCOES=100
(
echo 'codigo,tempo,memoria'
for e in $(seq 1 $EXECUCOES); do
for codigo in iterativo recursivo; do
/usr/bin/time -f "$codigo,%e,%M" "./$codigo" > /dev/null
done
done
) |& tee dados.csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment