Compare commits

..

2 Commits

Author SHA1 Message Date
Tiago Garcia 31843bdcd5
[MPEI] Aula01, Aula02
Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
2024-10-06 16:58:31 +01:00
Tiago Garcia 066454b1e3
Add gitignores
Signed-off-by: Tiago Garcia <tiago.rgarcia@ua.pt>
2024-10-06 16:58:07 +01:00
23 changed files with 296 additions and 0 deletions

1
3ano/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
peci/

Binary file not shown.

View File

@ -0,0 +1,21 @@
% Matriz 3x10000 em que cada coluna representa uma experiência com os 3
% resultados (cada valor está entre 0..1)
experiencias = rand(3,10000);
% Matriz 3x10000 com valores 1 ou 0 dependente se for maior que 0.5
lancamentos = experiencias > 0.5;
% Vetor 1x10000 com a soma de cada linha (número de resultados obtidos)
resultados = sum(lancamentos,1);
% Vetor 1x10000 com 1 se o resultado for 2 (o pretendido)
sucessos = resultados == 2;
% Determina a % de valores 1
P = sum(sucessos) / 10000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = 1e5; % Número de experiências
p = 0.5; % prob de cara
k = 2; % número de caras
n = 3; % número de lançamentos
lancamentos = rand(n,N) > p;
sucessos = sum(lancamentos) == k;
P = sum(sucessos) / N

View File

@ -0,0 +1,7 @@
N = 1e5; % Número de experiências
p = 0.5; % prob de cara
k = 6; % número de caras
n = 15; % número de lançamentos
lancamentos = rand(n,N) > p;
sucessos = sum(lancamentos) == k;
P = sum(sucessos) / N

View File

@ -0,0 +1,7 @@
N = 1e5; % Número de experiências
p = 0.5; % prob de cara
k = 6; % número de caras
n = 15; % número de lançamentos
lancamentos = rand(n,N) > p;
sucessos = sum(lancamentos) >= k;
P = sum(sucessos) / N

View File

@ -0,0 +1,22 @@
function P = ProbCara(nLan, nCara, nExp)
lancamentos = rand(nLan, nExp) > 0.5;
sucessos = sum(lancamentos) == nCara;
P = sum(sucessos) / nExp;
end
function Calc(n, color)
span = 1:n;
graph = zeros(n, 1);
for i = 1 : length(span)
graph(i) = ProbCara(n, i, 1e5);
end
stem(span, graph, color)
end
hold on
Calc(20, 'red')
Calc(40, 'blue')
Calc(100, 'green')
hold off

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,5 @@
function P = CalculateProbEqual(partial, total, experiences)
results = rand(total, experiences) > 0.5;
successes = sum(results) == partial;
P = sum(successes) / experiences;
end

View File

@ -0,0 +1,5 @@
function P = CalculateProbMaxEq(partial, total, experiences)
results = rand(total, experiences) > 0.5;
successes = sum(results) <= partial;
P = sum(successes) / experiences;
end

View File

@ -0,0 +1,5 @@
function P = CalculateProbMinEq(partial, total, experiences)
results = rand(total, experiences) > 0.5;
successes = sum(results) >= partial;
P = sum(successes) / experiences;
end

View File

@ -0,0 +1,6 @@
function P = CalculateProbMinMaxEq(min, max, total, experiences)
results = rand(total, experiences) > 0.5;
successes = sum(results) >= min;
successes = successes <= max;
P = sum(successes) / experiences;
end

View File

@ -0,0 +1,9 @@
a = CalculateProbMinEq(1,2,1e5);
d = CalculateProbMinEq(2,2,1e5);
e = CalculateProbEqual(1,4,1e5);
f = CalculateProbMinMaxEq(1,2,4,1e5);
fprintf("a) %.3f\n", a)
fprintf("d) %.3f\n", d)
fprintf("e) %.3f\n", e)
fprintf("f) %.3f\n", f)

View File

@ -0,0 +1,12 @@
N = 1e5; % Numero de experiencias
dardos = randi(100,20,N); % Gerar uma matriz 20xN com cada elemento pertencente [1,100]
res = zeros(1, N); % Criar uma matriz linha de 0
for i = 1:N
% unique -> retorna 1 se o campo de dardos selecionado apenas for '1'
res(i) = length(unique(dardos(:,i))) == 20; % Verificar para coluna
end
probSimul = sum(res) / N; % Calcular a probabilidade
fprintf("Prob. Simulação: %.4f\n", probSimul);

View File

@ -0,0 +1,12 @@
N = 1e5; % Numero de experiencias
dardos = randi(100,20,N); % Gerar uma matriz 20xN com cada elemento pertencente [1,100]
res = zeros(1, N); % Criar uma matriz linha de 0
for i = 1:N
% unique -> retorna 1 se o campo de dardos selecionado apenas for '1'
res(i) = not(length(unique(dardos(:,i))) == 20); % Verificar para coluna
end
probSimul = sum(res) / N; % Calcular a probabilidade
fprintf("Prob. Simulação: %.4f\n", probSimul);

View File

@ -0,0 +1,45 @@
N = 1e5; % Numero de experiencias
dArr = 10:10:100;
prob_array = zeros(length(dArr), 1);
for d = 1:length(dArr)
dardos = randi(1000,dArr(d),N);
res = zeros(1,N);
for i = 1:N
res(i) = not(length(unique(dardos(:,i))) == dArr(d));
end
prob = sum(res) / N;
prob_array(d) = prob;
end
subplot(2,1,1);
plot(dArr, prob_array, "-o");
title('m = 1000');
xlabel('Numero de dardos');
ylabel("Probabilidade");
grid on
prob_array = zeros(length(dArr), 1);
for d = 1:length(dArr)
dardos = randi(100000,dArr(d),N);
res = zeros(1,N);
for i = 1:N
res(i) = not(length(unique(dardos(:,i))) == dArr(d));
end
prob = sum(res) / N;
prob_array(d) = prob;
end
subplot(2,1,2);
plot(dArr, prob_array, "-o");
title('m = 100000');
xlabel('Numero de dardos');
ylabel("Probabilidade");
grid on

View File

@ -0,0 +1,24 @@
N = 1e5; % Numero de experiencias
m = [200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000];
prob_array = zeros(1, length(m));
for i = 1:length(m)
m_value = m(i);
dardos = randi(m_value,100,N);
res = zeros(1,N);
for j = 1:N
res(j) = not(length(unique(dardos(:,j))) == 100);
end
prob = sum(res) / N;
prob_array(i) = prob;
end
figure;
plot(m, prob_array, "-o");
title('Muitos graficos');
xlabel('Numero de alvos');
ylabel("Probabilidade");
grid on

View File

@ -0,0 +1,26 @@
N = 500;
T = 1000;
n_keys = 10;
prob_array = zeros(1,n_keys);
for n = 1:n_keys
prob = 0;
for i = 1:N
hash_exp = randi([0,T-1],n,T);
colisions = 0;
for j = 1:T
if n > length(unique(hash_exp(:,j)))
colisions = colisions + 1;
end
end
prob = prob + colisions / T;
end
prob_array(n) = prob / N;
end
fprintf("a) = %.4f\n", prob_array(10));
plot(1:n_keys, prob_array, "-o")
title("Ex3 b)");
xlabel("Numero de keys");
ylabel("Prob. de colisao");

View File

@ -0,0 +1,25 @@
N = 50;
T = 100:100:1000;
n_keys = 50;
prob_array = zeros(1,length(T));
for i = 1:length(T)
t = T(i);
prob = 0;
for n = 1:N
hash_exp = randi([1,t-1],n_keys,t);
colisions = 0;
for j = 1:t
if n_keys > length(unique(hash_exp(:,j)))
colisions = colisions + 1;
end
end
prob = prob + colisions / t;
end
prob_array(i) = prob / N;
end
plot(T, prob_array, "-o")
title("Ex3 c)");
xlabel("Tamanho do array");
ylabel("Prob. de colisao");

View File

@ -0,0 +1,17 @@
function n = Calc(p)
N = 1e5;
for pessoas = 2 : 366
a = randi(365, pessoas, N);
for i = 1:N
res(i) = length(unique(a(:, i))) < pessoas;
end
prob = sum(res)/N;
if (prob > p)
n = pessoas;
break
end
end
end
fprintf("a) = %.4f\n", Calc(0.5))
fprintf("b) = %.4f\n", Calc(0.9))

View File

@ -0,0 +1,46 @@
N = 1e5;
p_paridade = 0.5;
lancamentos = 2;
num_faces = 6;
p_serX = 1/6;
rolls = randi(num_faces, lancamentos, N);
soma9 = 0;
soma = sum(rolls);
for i = 1 : N
if soma(i) == 9
soma9 = soma9 + 1;
end
end
p_a = soma9/N;
soma_par = 0;
roll2 = rolls(2 : N+1);
for i = 1 : N
if mod(roll2(i), 2) == 0
soma_par = soma_par + 1;
end
end
p_b = soma_par/N;
ser5 = 0;
for i = 1 : N
if rolls(1, i) == 5 || rolls(2, i) == 5
ser5 = ser5 + 1;
end
end
p_c = ser5/N;
diff1 = 0;
for i = 1 : N
if rolls(1, i) ~= 1 && rolls(2, i) ~= 1
diff1 = diff1 + 1;
end
end
p_d = diff1/N;
fprintf("P(A) = %.4f\n", p_a)
fprintf("P(B) = %.4f\n", p_b)
fprintf("P(C) = %.4f\n", p_c)
fprintf("P(D) = %.4f\n", p_d)

1
3ano/1semestre/sio/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
personal_cybersecurity_map-pt.xlsx