0% found this document useful (0 votes)
16 views3 pages

CNC2024 Corrigé

The document contains Python code snippets related to matrix operations, clustering algorithms, and data manipulation. It includes functions for calculating minimum products, distances, and inertia in clustering, as well as methods for initializing clusters and performing k-means clustering. Additionally, it provides SQL queries for data retrieval and analysis from a dataset named 'Fleurs' and 'Seg'.

Uploaded by

Amal Nourelhadi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views3 pages

CNC2024 Corrigé

The document contains Python code snippets related to matrix operations, clustering algorithms, and data manipulation. It includes functions for calculating minimum products, distances, and inertia in clustering, as well as methods for initializing clusters and performing k-means clustering. Additionally, it provides SQL queries for data retrieval and analysis from a dataset named 'Fleurs' and 'Seg'.

Uploaded by

Amal Nourelhadi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

CNC2024-PSI Q9-

import numpy as np def matC(T) :


import math as m C =[[0]*(len(T) – 1) for i in range(len(T) – 1)]
import random as rd for j in range(1, len(C)) :
Q1- L = [5, 2, 6, 4, 7, 0, 1] for i in range(len(C) – j) :
Q2- L = [C[i][k]+C[k+1][i+j]+T[i]*T[k+1]*T[i+j+1] for
def listeCh(n) : k in range(i, i+j)]
L=[] C[i][i+j] = min(L)
while n != 0 : return C
L.append(n%10) Q10-
n = n//10 def matP(T, C) :
return L P = [[0]*(len(T)– 1) for i in range(len(T) – 1)]
Q3- for j in range(1, len(C)) :
def prod(L) : for i in range(len(C) – j) :
p=1 for k in range(i, i + j) :
for x in L : if C[i][k]+C[k+1][i+j]+T[i]*T[k+1]*T[i +j+1]==C[i][i+j]:
p *= x P[i][i+j] = k
return p return P
Q4- C(n) = 2+2n  O(n) avec n = len(L) Q11-

Q5- def prod(M, i, j, P) :


def prodCh(n) : if i == j :
return prod(listeCh(n)) return M[i]

Q6- elif i == j – 1 :

def decimal(L) : return np.dot(M[i], M[j])

s=0 elif i < j – 1 :


for i in range(len(L)) : return np.dot(prod(M, i, P[i][j], P), prod(M,P[i][j]+1, j, P))
s += L[i]*10**i Q12-
return s def prodMat(M) :

Q7- T = [len(M[0])] + [len(x[0]) for x in M]


def minProd(T, i, j) : C = matC(T)
if i == j – 1 : P = matP(T, C)
return 0 return prod(M, 0, len(M) – 1, P)

R=[minProd(T,i,k)+minProd(T,k,j)+T[i]*T[k]*T[j] for k in Q13-


range(i+1, j)] def convertir(S) :
return min(R) L = S.split(';')

Q8- return [float(x) for x in L]


def minPrd(T, i, j, D={}) : Q14-
if i == j – 1 : def lireF(chemin) :
return 0 f = open(chemin, "r")
elif (i, j) in D.keys( ) : L = f.readlines( )
return D[(i, j)] f.close( )
R=[] return [convertir(x) for x in L]

for k in range(i+1, j) : Q15-


a, b = minPrd(T, i, k, D), minPrd(T, k, j, D) def distance(X, Y) :

D[(i, k)], D[(k, j)] = a, b s=0


R.append(a + b + T[i]*T[k]*T[j]) for i in range(len(X)) :

return min(R) s += (X[i] - Y[i])**2


return m.sqrt(s) for v in G.values():
Q16- j = procheC(D[v[0]], C)
def initC(D, k) : for i in v :
C, i = [], 0 s += distance(D[i], C[j])
while i < k : return s
j = rd.randint(0, len(D) – 1) Q23-
if D[j] not in C : def linertie(D, n) :
C.append(D[j]) L = []
i += 1 for k in range(1, 10) :
return C G, C = kMeans(D, k, n)
Q17- s = inertie(D, G, C)
def procheC(F, C) : L.append((k, s))
k, dmin = 0, distance(F, C[0]) return L
for i in range(1, len(C)) : Q24- longS, largS, longP, largP (cluster = 1 ou 2(Fleurs))
d = distance(F, C[i]) Q25- select longS, largS, longP, largP from Fleurs where cluster in
if d < dmin : (0, 2) order by longS desc
k, dmin = i, d Q26- select avg(longS), max(largS), min(longP), max(cluster)+1
return p from Fleurs
Q18- Q27- select cluster, avg(longS), avg(largS), avg(longP), avg(largP)
def cluster(D, C) : from Fleurs group by cluster
G = {} Q28- select cluster, count(*) as n from Fleurs group by cluster
for i in range(len(C)) : having n >= 1000 and n%10 == 0
G[i] = [] …………………………………………………………………..
for i in range(len(D)) : CNC2024-MP
p = procheC(D[i], C) import numpy as np
G[p].append(i) import random as rd
return G import matplotlib.pyplot as pl
Q19- Q1-
def newC(D, g) : def puiss(x, n) :
C = [0]*len(D[0]) p=1
for j in range(len(D[0])) : while n != 0 :
L = [D[i][j] for i in g] if n%2 == 1 :
C[j] = sum(L)/len(L) p = p*x
return C x, n = x*x, n//2
Q20- return p
def majC(D, G) : Q2- [10, 0, 7, -3, -2, 0, -1]
return [newC(D, v) for v in G.values()] Q3-
Q21- def val(x, L) :
def kMeans(D, k, n) : s=0
C = initC(D, k) for i in range(len(L)) :
for i in range(n) : s += L[i]*puiss(x, i)
G = cluster(D, C) return s
C = majC(D, G) Q4-
return G, C C(n) = n+ log2(i)  O(log2(n!))  O(nlog2(n)) avec n = len(L)
Q22- Q5-
def inertie(D, G, C) : def image(X, L) :
s=0 return [val(i, L) for i in X]
Q6- def seg(M, C) :
def compose(x, L, n) : return [[procheC(M[i][j],C) for j in range(len(M[0]))] for i
for i in range(n) : in range(len(M))]
x = val(x, L) Q20-
return x def newC(M, R, g) :
Q7Q11- voir Q7Q12 de l’épreuve CNC2024-PSI s, n = [0]*len(M[0][0]), 0
Q12- 8bits for i in range(len(R)) :
Q13- 1000*1800*3/1000=5400ko for j in range(len(R[0])) :
Q14- if R[i][j] == g :
def histo(M) : n += 1
H = [[0]*256 for i in range(3)] for k in range(len(s)) :
for i in range(len(M)) : s[k] += M[i][j][k]
for j in range(len(M[0])) : for k in range(len(s)) :
for k in range(3) : s[k] = s[k] // n
H[k][M[i][j][k]] += 1 return s
return H Q21-
Q15- def majC(M, R, k) :
def rep(H) : return [newC(M, R, i) for i in range(k)]
for i in range(len(H)) : Q22-
pl.plot(H[i]) def kMeans(M, k, n) :
pl.legend(['Rouge', 'Vert', 'Bleu']) C = initC(M,k)
pl.show( ) for i in range(n) :
Q16- R = seg(M, C)
def distance(X, Y) : C = majC(M, R, k)
s=0 return R, C
for i in range(len(X)) : Q23-
s += abs(X[i] - Y[i]) def calInertie(M, R, C) :
return s s=0
Q17- for i in range(len(R)) :
def initC(M, k) : for j in range(len(R[0])) :
assert k < len(M)*len(M[0]) s += distance(M[i][j], C[R[i][j]])
C, n = [], 0 return s
while n < k : Q24-
i, j = rd.randint(0, len(M) – 1), rd.randint(0, len(M[0])-1) def inerties(M, n) :
if M[i][j] not in C : D = {}
C.append(M[i][j]) for k in range(1, 10) :
n+=1 R, C = kMeans(M, k, n)
return C D[k] = calInertie(M, R, C)
Q18- return D
def procheC(P, C) : Q25- (ligne, colonne)
k, dm = 0, distance(P, C[0]) Q26- ligne, colonne, rouge, vert, bleu (cluster = 1 ou 2(Seg))
for i in range(1,len(C)): Q27- select ligne, colonne, rouge, vert, bleu from Seg where cluster
d = distance(P, C[i]) in (1, 2) order by ligne, colonne
if d < dm : Q28- select cluster, count(*) as n, avg(rouge) as c from Seg group by
k, dm = i, d cluster having c<=200 and c>=100 order by n desc
return k Q29- select avg(n) from (select count(*) as n from Seg group by
Q19- cluster) as T

You might also like