SAT-Table#
Mahmood Amintoosi, Fall 2024
Computer Science Dept, Ferdowsi University of Mashhad
import numpy as np
محاسبه فرمول استرلینگ
\[\begin{split}
S(N,m) = m S(N-1,m) + S(N-1,m-1)
\\
S(N,k) = k S(N-1,k)+ S(N-1,k-1)
\end{split}\]
def S(N, k):
if k == 1 or k == N:
return 1
elif k > N:
return 0
else:
return k * S(N - 1, k) + S(N - 1, k - 1)
S_3_2 = S(3, 2)
print(S_3_2)
S_15_3 = S(15, 3)
print(S_15_3)
S_150_3 = S(150, 3)
print(S_150_3)
3
2375101
61664747505854495487450129694992261011432242869144177577783166025584730
جدول درستی با سه متغیر
for x1 in range(2):
for x2 in range(2):
for x3 in range(2):
print(x1,x2,x3)
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
def SAT_Table(x, i):
if i == x.shape[0]:
print(x)
else:
for x[i] in range(2):
SAT_Table(x, i + 1)
N = 3
x = np.zeros(N)
SAT_Table(x, i=0)
[0. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]
[0. 1. 1.]
[1. 0. 0.]
[1. 0. 1.]
[1. 1. 0.]
[1. 1. 1.]
تابع رو چگونه اصلاح کنیم که هر سطر جدول درستی رو برگردونه؟
The following code is not correct
def SAT_Table(x, i):
if i == x.shape[0]:
return x
else:
for x[i] in range(2):
return SAT_Table(x, i + 1)
N = 3
x = np.zeros(N)
i = 0
print(SAT_Table(x, i))
[0. 0. 0.]
Using yield :)#
def SAT_Table(x, i):
if i == x.shape[0]:
yield x
else:
for x[i] in range(2):
yield from SAT_Table(x, i + 1)
N = 3
x = np.zeros(N)
i = 0
for s in SAT_Table(x, i):
print(s)
[0. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]
[0. 1. 1.]
[1. 0. 0.]
[1. 0. 1.]
[1. 1. 0.]
[1. 1. 1.]