Algorithm design & data structure
6.63K subscribers
950 photos
142 videos
175 files
545 links
این کانال برای تمامی علاقه‌مندان به کامپیوتر، مخصوصاً حوزه ساختمان داده‌ها و الگوریتم‌ها، مفید می باشد. آشنایی با ریاضیات مقدماتی، برنامه‌نویسی مقدماتی و پیشرفته و همچنین شی‌گرایی می‌تواند در درک بهتر مفاهیم این درس کمک‌ کند.

👨‍💻Admin👉 @Se_mohamad
Download Telegram
در صورتی که گراف خلوت باشد کدام یک از الگوریتم های زیر سریع تر درخت پوشای کمینه را پیدا میکند؟
Anonymous Quiz
34%
الگوریتم کراسکل
38%
الگوریتم پریم
11%
الگوریتم فلوید
18%
الگوریتم BFS
شبه کد ضرب دو عدد با استفاده از الگورتیم Divide and Conquer
📣👨‍💻 @AlgorithmDesign_DataStructuer
👍1
def Divide_remaining(m,n):
if m < n:
return m
else:
return Divide_remaining(m-n,n)


m = int(input("Enter the number of elements in the list: "))
n = int(input("Enter the number of elements to be divided: "))

print("The remainder of dividing m by n :" , Divide_remaining(m,n))


کد بازگشتی باقی مانده تقسیم m بر n

📣👨‍💻 @AlgorithmDesign_DataStructuer
میخواهیم در یک آرایه به طول n، عنصري که k بار تکرار شده بیـابیم. K در ورودي داده شده و مستقل از n است. زمان سریعترین الگوریتم:
Anonymous Quiz
27%
n log n
38%
n log k
17%
nk
18%
n+k
👌3🎉1
الگوریتم فلوید (Floyd's algorithm) یکی از الگوریتم‌های معروف برای محاسبه کوتاه‌ترین مسیرها در گراف‌ها است. این الگوریتم به نام دانشمند ریاضی و کامپیوتری "رابرت فلوید" نام‌گذاری شده است.

در این الگوریتم، فرض می‌شود که وزن هر یال می‌تواند منفی یا مثبت باشد. هدف این الگوریتم پیدا کردن کوتاه‌ترین مسیرها بین هر دو رأس از رأس‌های گراف است.

مراحل اصلی الگوریتم فلوید عبارتند از:

1. ماتریس وزن: ابتدا یک ماتریس وزن به نام D را تعریف می‌کنیم که در آن D[i][j] وزن کوتاه‌ترین مسیر بین رأس i و j است. این ماتریس در ابتدا برابر با وزن‌های یال‌های گراف است و برای یال‌هایی که میان دو رأس مستقیماً وجود ندارد (به جز خود رأس با خودش)، مقدار بی نهایت یا مقدار زیادی معرفی می‌شود.

2. الگوریتم اصلی: برای هر سه رأس i، j و k، الگوریتم مقدار D[i][j] را با استفاده از فرمول زیر به‌روزرسانی می‌کند:

D[i][j] = min(D[i][j], D[i][k] + D[k][j])

به عبارت دیگر، فرض می‌کنیم که ما به‌روزرسانی D[i][j] را انجام داده‌ایم و k رأسی است که از i به j مسیر می‌دهد. حالا ما وزن کوتاه‌ترین مسیر بین i و j را با استفاده از مقدار فعلی آن (D[i][j]) و وزن مسیر i به k به‌علاوه وزن مسیر k به j (D[i][k] + D[k][j]) محاسبه می‌کنیم. اگر این مقدار کمتر از مقدار فعلی D[i][j] باشد، D[i][j] را به‌روزرسانی می‌کنیم.

3. پایان الگوریتم: بعد از اجرای مرحله 2 برای همه سه رأس i، j و k، ماتریس D به‌روز شده و حاوی اطلاعات کوتاه‌ترین مسیرهای بین هر زوج رأس است.

الگوریتم فلوید بسیار موثر است و با زمان اجرای O(V^3) انجام می‌شود، که در آن V تعداد رئوس گراف است. این الگوریتم به خوبی با وزن‌های منفی کار می‌کند، به شرطی که هیچ دور منفی در گراف وجود نداشته باشد، زیرا این الگوریتم قادر به تشخیص دورهای منفی نمی‌باشد و ممکن است در صورت وجود دور منفی به مقدار بی نهایت یا عدد بسیار بزرگی همگرا شود.
📣👨‍💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
برخی از لایه ها یا مراحل مهم برای الگوریتم CNN،

1. لایه پیچشی (مهمترین لایه در CNN)
2. عملکرد فعال سازی (افزایش قدرت، به خصوص لایه ReLu)

3. ادغام (کاهش ابعاد مانند PCA)

4. مسطح کردن (تبدیل فرم ماتریس به تک ستون بزرگ)

5. لایه فعال سازی - لایه SOFTMAX (لایه خروجی بیشتر، توزیع احتمال)

6. اتصال کامل (بستگی به هدف/متغیر وابسته دارد)

📣👨‍💻 @AlgorithmDesign_DataStructuer
👌3
def reverse(s):
if s == "":
return s
else:
return reverse(s[1:]) + s[0]

s = "Hello"
print("The original string is:", s)
print("The reversed string(using recursion) is:", reverse(s))

کد بازگشتی معکوس کردن رشته

📣👨‍💻 @AlgorithmDesign_DataStructuer
👌1
Greedy_knapack(n,W, p[1…n], w[1…n])
{
x=0; profit=0;
rw=W
for i=1 to n do
{
if wi<rw then
x[i]=1;
rw=rw-wi;
else
break;
}
x[i]= 𝑟𝑤/𝑤𝑖;
profit= profit+p[i]*x[i];
}


الگوریتم کوله‌پشتی کسری (Fractional Knapsack Algorithm) یک الگوریتم زمان واقعی و محاسباتی برای حل مسئله کوله‌پشتی است. در این مسئله، ما یک کوله‌پشتی داریم که ظرفیت مشخصی دارد و می‌خواهیم اجناسی را درون آن بگذاریم به‌طوری که ارزش کلی اجناس درون کوله‌پشتی بیشینه شود. هر جنس دارای وزن و ارزش مشخصی است.

الگوریتم کوله‌پشتی کسری به این صورت است:

1. محاسبه نسبت ارزش به وزن (value/weight) برای هر جنس.
2. مرتب کردن اجناس بر اساس این نسبت.
3. از اجناس با بیشترین نسبت ارزش به وزن شروع به گذاشتن درون کوله‌پشتی می‌کنیم. اگر می‌توانیم همه‌ی اجناس را بگیریم، آنگاه همه‌ی آن‌ها را می‌گیریم. در غیر این صورت، قسمتی از آخرین جنسی که می‌توانیم درون کوله‌پشتی قرار دهیم را قطعه‌بندی می‌کنیم و به صورت جزئی از آن را می‌گذاریم.

الگوریتمی بالا این الگوریتم به ازای هر جنس، محاسبه می‌کند که چقدر از آن جنس می‌تواند بگیرد و این کار را به ترتیب جنس‌ها انجام می‌دهد. در نهایت، مقدار سود کلی که می‌توان با قراردادن اجناس داخل کوله‌پشتی بدست آورد، محاسبه می‌شود.

این الگوریتم در مسائلی که بهینه‌سازی نسبت به جمعیت جواب‌ها کارآمد است، اما در برخی موارد ممکن است بهینه نباشد.
مرتبه زمانی این الگوریتم O(n log n) می باشد.

📣👨‍💻 @AlgorithmDesign_DataStructuer
💯2
import torch

# Scalar
scalar = torch.tensor(7)
print(scalar)

# Vector
vector = torch.tensor([7 , 4])
print(vector)

# Matrix
matrix = torch.tensor([[7, 10], [4, 3] , [5, 1]])
print(matrix)

# Tensor
tensor = torch.tensor([[[1, 2, 3],
[3, 6, 9],
[2, 4, 5]]])
print(tensor)

با استفاده از کتابخانه torch می توانیم به راحتی 4 عمل بالا را نیز انجام دهیم که در شبکه های عصبی بسیار زیاد از این 4 عمل نیز استفاده می شود.

📣👨‍💻 @AlgorithmDesign_DataStructuer
👍3
به دست آوردن تعداد سیکل های ساده در یک گراف مسطح با الگوریتمی با درجه ......... قابل محاسبه است.
Anonymous Quiz
11%
1
39%
n
38%
n^2
12%
2^n
def reverse_sum(n , m):
if n <= 1 or m <= 1:
return 1
return n+m*reverse_sum(n-1 , m // 2)

print(reverse_sum(2 ,3))
output 5

کد بازگشتی حاصل جمع دو عدد n و m

📣👨‍💻 @AlgorithmDesign_DataStructuer
مراحل الگوریتم کروسکال (Kruskal's algorithm)

1️⃣یال ها را به ترتیب صعودی وزن در نظر بگیر.
2️⃣کم وزن ترین یال باقیمانده را به درخت T اضافه کن , مگر آنکه این کار باعث اینجاد دور شود.

🚨به مثال بالا توجه کنید.

📣👨‍💻 @AlgorithmDesign_DataStructuer
import numpy as np 

A = np.array([[1 , 2] , [3 , 4] , [5 , 6]])
B = np.array([[2 , 1] , [0 , 1] , [3 ,2]])

C = A + B
print("sum of arrays A and B is : ", C)

sum of arrays A and B is : [[3 3]
[3 5]
[8 8]]
مجموع دو ماتریس با استفاده از کتاب خانه numpy

📣👨‍💻 @AlgorithmDesign_DataStructuer
مرتبه زمانی الگوریتم هاي kruskul و prim براي یافتن درخت پوشاي کمینه یک گراف بـا n راس و e یال به ترتیب از چپ به راست کدام است؟
Anonymous Quiz
36%
O(eloge) , O(n^2)
41%
O(n^2) , O(eloge)
23%
O(eloge) , O(eloge)
0%
O(n^2) , O(n^2)
رابطه بازگشتی فیبوناچی یک رابطه همگن می باشد که آن را میتوان به صورت معادله درجه دوم نوشت و پس از به دست آوردن ریشه های آن میتوان اعداد فیبوناچی را با رابطه بسیار ساده تر و کم هزینه تر به دست آورد.

📣👨‍💻 @AlgorithmDesign_DataStructuer
import numpy as np 

a = np.array([[0.45053314, 0.17296777, 0.34376245, 0.5510652],
[0.54627315, 0.05093587, 0.40067661, 0.55645993],
[0.12697628, 0.82485143, 0.26590556, 0.56917101]])
# Sum of all elements
print(a.sum())
output = 4.8595784

# Find the minimum value
print(a.min())
output = 0.05093587

# Find the maximum value
print(a.max())
output = 0.82485143

# Find the mean value
print(a.mean())
output = 0.40496518


sum:
⬅️این محاسبه مجموع تمام عناصر موجود در آرایه را انجام می دهد.
main:
⬅️این محاسبه مقدار کمینه در آرایه را انجام می دهد.
max:
⬅️این محاسبه مقدار بیشینه در آرایه را انجام می دهد.
mean:
⬅️این محاسبه میانگین تمام عناصر در آرایه را انجام می دهد.

📣👨‍💻 @AlgorithmDesign_DataStructuer
👍3
@AlgorithmDesign_DataStructuer.pdf
5.5 MB
📚کتاب "یادگیری عمیق" به زبان فارسی + کار با Pytorch

📣👨‍💻 @AlgorithmDesign_DataStructuer
👌3👍1🔥1💯1
اگر A آرایه ای مرتب از اعداد صحیح 1 الی 1024 باشد ، الگوریتم جستجوی دودیی با چند بار تکرار عدد 4 را پیدا میکند؟
Anonymous Quiz
17%
7
40%
8
18%
9
25%
10