def is_balanced(expression):
stack = []
opening_brackets = {'(', '[', '{'}
closing_brackets = {')', ']', '}'}
bracket_pairs = {'(': ')', '[': ']', '{': '}'}
for char in expression:
if char in opening_brackets:
stack.append(char)
elif char in closing_brackets:
if not stack:
return False # Unmatched closing bracket
top = stack.pop()
if bracket_pairs[top] != char:
return False # Mismatched opening and closing brackets
return not stack # Expression is balanced if stack is empty
# Example usage:
expression1 = "((2 + 3) * [4 - 1])" # Balanced expression
expression2 = "{[2 * (3 + 4)] / (5 - 1)}" # Balanced expression
expression3 = "({[2 + 3] * 4}" # Unbalanced expression
print(is_balanced(expression1)) # Output: True
print(is_balanced(expression2)) # Output: True
print(is_balanced(expression3)) # Output: False
✅بررسی براکت های متوازن در یک عبارت یک مشکل رایج در علوم کامپیوتر و برنامه نویسی است، به ویژه در زمینه تجزیه و تفسیر زبان ها. هدف این است که تعیین کنیم آیا یک عبارت داده شده دارای جفت پرانتز تو در تو است (مانند پرانتز ()، پرانتز []، یا پرانتز مجعد {}). اگر براکت ها متعادل باشند، به این معنی است که هر براکت بازکننده دارای یک براکت بسته کننده مربوطه است و به درستی و بدون هیچ گونه همپوشانی تودرتو شده اند.
در اینجا یک توضیح اساسی در مورد نحوه برخورد با این مشکل آورده شده است:
1️⃣-تکرار از طریق عبارت: با تکرار از طریق هر یک از کاراکترهای عبارت، از چپ به راست شروع کنید.
2️⃣-از یک ساختار داده پشته استفاده کنید: همانطور که عبارت را تکرار می کنید، از یک پشته برای پیگیری براکت های باز که با آنها روبرو می شوید استفاده کنید. هر زمان که با یک براکت باز (مانند '('، '['، یا '{') مواجه شدید، آن را روی پشته فشار دهید.
3️⃣-بررسی بسته شدن براکت: وقتی با یک براکت بسته (')'، ']'، یا '}' مواجه شدید، بررسی کنید که آیا پشته خالی است. اگر اینطور باشد، هیچ براکت باز منطبقی برای براکت بسته شدن فعلی وجود ندارد، که نشان میدهد عبارت نامتعادل است. در غیر این صورت، عنصر بالایی را از پشته بیرون بیاورید و آن را با براکت بسته فعلی مقایسه کنید. اگر مطابقت نداشته باشند (به عنوان مثال، '(' با ']' مطابقت ندارد)، در این صورت عبارت نامتعادل است.
4️⃣-تا پایان عبارت ادامه دهید: مراحل 2 و 3 را تکرار کنید تا زمانی که تمام کاراکترهای عبارت را پردازش کنید.
5️⃣-بررسی پشته: پس از پردازش همه کاراکترها، بررسی کنید که آیا پشته خالی است. اگر خالی باشد، تمام براکت های باز با براکت های بسته مطابقت داده شده اند و عبارت متعادل است. در غیر این صورت، پرانتزهای باز بیهمتا باقی مانده است که بیانگر یک عبارت نامتعادل است.
📣👨💻 @AlgorithmDesign_DataStructuer
👍7
def quotient( n , d ):
if n <= d:
return 0
return 1 + quotient(n-d, d)
print(quotient( 10 , 3))
کد بازگشتی تقسیم صحیح دو عدد n و d
📣👨💻 @AlgorithmDesign_DataStructuer
⬅️واریانس(Variance):
واریانس یک مجموعه داده اندازه گیری می کند که نقاط داده چقدر با میانگین تفاوت دارند.
با گرفتن میانگین مجذور اختلاف بین هر نقطه داده و میانگین محاسبه می شود.
از نظر ریاضی، واریانس به صورت (σ²) نمایش داده می شود.
◀️انحراف معیار(Standard Deviation):
انحراف معیار جذر واریانس است.
میانگین انحراف نقاط داده را از میانگین اندازه گیری می کند.
انحراف استاندارد مفید است زیرا معیاری از پراکندگی داده ها را در واحدهای خود داده ارائه می دهد و تفسیر آن را آسان تر می کند.
از نظر ریاضی، انحراف معیار به صورت (σ) نمایش داده می شود.
📣👨💻 @AlgorithmDesign_DataStructuer
واریانس یک مجموعه داده اندازه گیری می کند که نقاط داده چقدر با میانگین تفاوت دارند.
با گرفتن میانگین مجذور اختلاف بین هر نقطه داده و میانگین محاسبه می شود.
از نظر ریاضی، واریانس به صورت (σ²) نمایش داده می شود.
◀️انحراف معیار(Standard Deviation):
انحراف معیار جذر واریانس است.
میانگین انحراف نقاط داده را از میانگین اندازه گیری می کند.
انحراف استاندارد مفید است زیرا معیاری از پراکندگی داده ها را در واحدهای خود داده ارائه می دهد و تفسیر آن را آسان تر می کند.
از نظر ریاضی، انحراف معیار به صورت (σ) نمایش داده می شود.
📣👨💻 @AlgorithmDesign_DataStructuer
ماکسیمم تعداد مقایسه براي min-heap کردن یک max-heap با n گره برابر است با:
Anonymous Quiz
19%
n+log n
36%
log n
36%
nlog n
9%
2n
✅معرفی آموزش یادگیری ماشین (Machine Learning) :
آیا تا به حال میخواستهاید به عمق دانش خود در زمینه یادگیری ماشین بپردازید؟ آیا به دنبال منبعی هستید که به شما اصول و مفاهیم اصلی این حوزه پرکاربرد را به شیوهای ساده و جذاب آموزش دهد؟ پس ویدیوهای آموزشی در یوتیوب بهترین گزینه برای شماست!
در یوتیوب، میلیونها ویدیو و منبع آموزشی موجود است که به شما کمک میکنند تا مفاهیم یادگیری ماشین را درک کنید و از این تکنولوژی پرقدرت بهره ببرید. از مبتدی تا پیشرفته، ویدیوهای مختلفی برای تمام سطوح دانشی در دسترس هستند.
در این ویدیوها، از اصول اولیه شبکههای عصبی گرفته تا مفاهیم پیشرفته مانند شبکههای عصبی ژرف، شبکههای ترکیبی، شبکههای مولد و غیره آموخته میشود. همچنین، مفاهیم مهم مانند توابع هزینه، بهینهسازی، و تکنیکهای مختلف آموزش مدلهای گراف را نیز توضیح داده میشود.
لینک فیلم آموزشی یوتیوب:
🌐 Machine Learning
دانلود اسلاید:
📎 Slides
📣👨💻 @AlgorithmDesign_DataStructuer
آیا تا به حال میخواستهاید به عمق دانش خود در زمینه یادگیری ماشین بپردازید؟ آیا به دنبال منبعی هستید که به شما اصول و مفاهیم اصلی این حوزه پرکاربرد را به شیوهای ساده و جذاب آموزش دهد؟ پس ویدیوهای آموزشی در یوتیوب بهترین گزینه برای شماست!
در یوتیوب، میلیونها ویدیو و منبع آموزشی موجود است که به شما کمک میکنند تا مفاهیم یادگیری ماشین را درک کنید و از این تکنولوژی پرقدرت بهره ببرید. از مبتدی تا پیشرفته، ویدیوهای مختلفی برای تمام سطوح دانشی در دسترس هستند.
در این ویدیوها، از اصول اولیه شبکههای عصبی گرفته تا مفاهیم پیشرفته مانند شبکههای عصبی ژرف، شبکههای ترکیبی، شبکههای مولد و غیره آموخته میشود. همچنین، مفاهیم مهم مانند توابع هزینه، بهینهسازی، و تکنیکهای مختلف آموزش مدلهای گراف را نیز توضیح داده میشود.
لینک فیلم آموزشی یوتیوب:
🌐 Machine Learning
دانلود اسلاید:
📎 Slides
📣👨💻 @AlgorithmDesign_DataStructuer
👍6
def f(n):
if n == 0:
return 0
return n % 2 + f(n//2) * 10
print(f(5))
کد بازگشتی به دست آوردن تبدیل مبانی 10 به مبنای 2
📣👨💻 @AlgorithmDesign_DataStructuer
محاسبه پیچیدگی رابطه بازگشتی از روش باز کردن رابطه :
T(n)=2T(n^1/2)+log(n)
📣👨💻 @AlgorithmDesign_DataStructuer
T(n)=2T(n^1/2)+log(n)
📣👨💻 @AlgorithmDesign_DataStructuer
⚫️شبکه عصبی ساده یک مدل محاسباتی است که الهام گرفته از ساختار سیستم عصبی انسان است. این شبکهها از الگوهای تصویری مغز برای حل مسائلی که به دقت، الگویی یا پترنی مرتبط میشوند، الهام گرفتهاند. هر شبکه عصبی ساده شامل واحدهای پردازشی کوچکی به نام نورونها است که به صورت مترتب در لایههای مختلف قرار دارند. هر نورون با ورودیهایش تعامل میکند، آنها را پردازش میکند و یک خروجی تولید میکند.
🔵شبکه عصبی ساده معمولاً دارای سه لایه اصلی است: لایه ورودی، لایه مخفی (یا چند لایه مخفی) و لایه خروجی. لایه ورودی وظیفه دریافت دادههای ورودی را دارد، لایههای مخفی به عنوان لایههای پردازشی عمل میکنند که ویژگیهای مخفی دادهها را استخراج میکنند، و لایه خروجی خروجی مدل را تولید میکند.
🔴آموزش یک شبکه عصبی ساده عموماً شامل دو مرحله است: فاز فیدباک و فاز پسخورد. در فاز فیدباک، شبکه به تجربه و دادههای ورودی آموزش داده شده است و وزنهای بین نورونها بهروزرسانی میشوند تا خروجی شبکه به خروجی مورد نظر نزدیک شود. در فاز پسخورد، عملکرد شبکه با استفاده از دادههای آزمایشی ارزیابی میشود و وزنها بر اساس نتایج ارزیابی بهروزرسانی میشوند تا دقت شبکه افزایش یابد.
🟤از آنجا که شبکههای عصبی ساده توانایی تشخیص و الگویابی در دادههای پیچیده را دارند، آنها به صورت گسترده در زمینههای مختلفی از جمله پردازش تصویر، تشخیص گفتار، ترجمه ماشینی، تشخیص الگو، پیشبینی و... مورد استفاده قرار میگیرند.
برای مطالعه بیشتر:
🌐Introduction to Neural Networks
📣👨💻 @AlgorithmDesign_DataStructuer
🔵شبکه عصبی ساده معمولاً دارای سه لایه اصلی است: لایه ورودی، لایه مخفی (یا چند لایه مخفی) و لایه خروجی. لایه ورودی وظیفه دریافت دادههای ورودی را دارد، لایههای مخفی به عنوان لایههای پردازشی عمل میکنند که ویژگیهای مخفی دادهها را استخراج میکنند، و لایه خروجی خروجی مدل را تولید میکند.
🔴آموزش یک شبکه عصبی ساده عموماً شامل دو مرحله است: فاز فیدباک و فاز پسخورد. در فاز فیدباک، شبکه به تجربه و دادههای ورودی آموزش داده شده است و وزنهای بین نورونها بهروزرسانی میشوند تا خروجی شبکه به خروجی مورد نظر نزدیک شود. در فاز پسخورد، عملکرد شبکه با استفاده از دادههای آزمایشی ارزیابی میشود و وزنها بر اساس نتایج ارزیابی بهروزرسانی میشوند تا دقت شبکه افزایش یابد.
🟤از آنجا که شبکههای عصبی ساده توانایی تشخیص و الگویابی در دادههای پیچیده را دارند، آنها به صورت گسترده در زمینههای مختلفی از جمله پردازش تصویر، تشخیص گفتار، ترجمه ماشینی، تشخیص الگو، پیشبینی و... مورد استفاده قرار میگیرند.
برای مطالعه بیشتر:
🌐Introduction to Neural Networks
📣👨💻 @AlgorithmDesign_DataStructuer
Victorzhou
Machine Learning for Beginners: An Introduction to Neural Networks - victorzhou.com
A simple explanation of how they work and how to implement one from scratch in Python.
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
فرض کنید A یک ماتریس به اندازه n* n و K یک k * k هسته باشد. برای راحتی، اجازه دهید t = n - k + 1.
برای محاسبه کانولوشن A * K، باید ضرب ماتریس-بردار Mv^T = v'^T را محاسبه کنیم که بعد از محاسبه آن به یک ویژگی جدید خواهیم رسید.
📎برای اطلاعات بیشتر:
🌐 Convolutions and Kernels
📣👨💻 @AlgorithmDesign_DataStructuer
برای محاسبه کانولوشن A * K، باید ضرب ماتریس-بردار Mv^T = v'^T را محاسبه کنیم که بعد از محاسبه آن به یک ویژگی جدید خواهیم رسید.
📎برای اطلاعات بیشتر:
🌐 Convolutions and Kernels
📣👨💻 @AlgorithmDesign_DataStructuer
فرض کنید T یک درخت پوشاي کمینه از گراف G باشد، در رابطه با T همهي مـوارد زیـرصحیح اند بجز :
Anonymous Quiz
33%
براي هر جفت رأس s و t ، کوتاهترین مسیر بین s و t در G همان مسیر بین s و t در T است.
33%
درخت T یکتا نیست.
17%
درخت T شامل تمام گره های G می باشد.
17%
هر مسیر در T بین دو راس s و t یک کوتاهترین مسیر در G نیست.
Adjacency list:
لیست مجاورت یک روش برای نمایش گراف است که بیان میکند که هر گره با چه گرههای دیگری در ارتباط است. در این روش، برای هر گره، لیستی از تمام گرههای مجاور آن در گراف ذخیره میشود.
با استفاده از لیست مجاورت، میتوان به سادگی و به سرعت اطلاعات در مورد روابط بین گرهها را به دست آورد. علاوه بر این، با استفاده از لیست مجاورت، عملیات مختلفی نظیر جستجو، پیدا کردن همسایگان و تحلیل شبکه را به سادگی قابل انجام است.
بنابراین، لیست مجاورت یک روش کارآمد و ساده برای نمایش و تحلیل شبکهها و گرافها است که در بسیاری از حوزههای علمی و فناورانۀ کاربرد دارد.
📣👨💻 @AlgorithmDesign_DataStructuer
لیست مجاورت یک روش برای نمایش گراف است که بیان میکند که هر گره با چه گرههای دیگری در ارتباط است. در این روش، برای هر گره، لیستی از تمام گرههای مجاور آن در گراف ذخیره میشود.
با استفاده از لیست مجاورت، میتوان به سادگی و به سرعت اطلاعات در مورد روابط بین گرهها را به دست آورد. علاوه بر این، با استفاده از لیست مجاورت، عملیات مختلفی نظیر جستجو، پیدا کردن همسایگان و تحلیل شبکه را به سادگی قابل انجام است.
بنابراین، لیست مجاورت یک روش کارآمد و ساده برای نمایش و تحلیل شبکهها و گرافها است که در بسیاری از حوزههای علمی و فناورانۀ کاربرد دارد.
📣👨💻 @AlgorithmDesign_DataStructuer
👍2
آنالیز توابع بازگشتی :
از آنجایی که در توابع بازگشتی، توابع خود را فراخوانی کرده و برای انتقال جواب از روش پشته استفاده می کنند ، فلذا تنها راه پیاده سازی پشته درخت است.
توضیح کد بازگشتی در تصویر :
آیا 7>1است ؟ خیر. فلذا خط ' 1 return ' اجرا نمی شود. در غیر این صورت عدد (7)+n ، فراخوانی مجدد تابع (عدد انتزاعی)
مجددا تابع فراخوانی می شود برای عدد .1شرط برسی می شود .آیا 1>1؟ خیر. فلذا خط 1 return'
اجرا نمی شود. در غیر این صورت عدد (6)+n فراخوانی مجدد تابع( عدد انتزاعی)
مراحل فوق را تا زمانی تکرار می کنیم که شرط نقض شود (1=>n ) باشد و عدد 1 را return کند.
📣👨💻 @AlgorithmDesign_DataStructuer
از آنجایی که در توابع بازگشتی، توابع خود را فراخوانی کرده و برای انتقال جواب از روش پشته استفاده می کنند ، فلذا تنها راه پیاده سازی پشته درخت است.
توضیح کد بازگشتی در تصویر :
آیا 7>1است ؟ خیر. فلذا خط ' 1 return ' اجرا نمی شود. در غیر این صورت عدد (7)+n ، فراخوانی مجدد تابع (عدد انتزاعی)
مجددا تابع فراخوانی می شود برای عدد .1شرط برسی می شود .آیا 1>1؟ خیر. فلذا خط 1 return'
اجرا نمی شود. در غیر این صورت عدد (6)+n فراخوانی مجدد تابع( عدد انتزاعی)
مراحل فوق را تا زمانی تکرار می کنیم که شرط نقض شود (1=>n ) باشد و عدد 1 را return کند.
📣👨💻 @AlgorithmDesign_DataStructuer
هرس آلفا بتا(Alpha–beta pruning) چیست؟
الگوریتم minimax از طریق هرس آلفا-بتا بهینه شده است که در بخش بعدی به تفصیل توضیح داده شده است. نیاز برای هرس از این واقعیت ناشی می شود که درختان تصمیم ممکن است در برخی شرایط بسیار پیچیده شوند. برخی از شاخه های اضافی در آن درخت به پیچیدگی مدل می افزایند. برای دور زدن این موضوع، از هرس آلفا-بتا استفاده میشود که کامپیوتر را از بررسی کل درخت نجات میدهد. الگوریتم توسط این گره های غیر معمول کند می شود. در نتیجه حذف این گره ها، الگوریتم کارآمدتر می شود.
پیکربندی کلی(نسخه MIN):
ما در نودی مثل n مقدار MIN-VALUE را محاسبه میکنیم.
فرض کنید a بیشترین مقداری باشد که تابع MAX بالایی تا کنون کسب کرده است.
ما میخواهیم توی فرزندان n بگردیم.
اگر مقادیر یکی از فرزندان n از a کمتر باشد , نیازی به محاسبه ی بقیه ی فرزندان نیست.
نسخه MAX قریبنه حالت بالا است.
📣👨💻 @AlgorithmDesign_DataStructuer
الگوریتم minimax از طریق هرس آلفا-بتا بهینه شده است که در بخش بعدی به تفصیل توضیح داده شده است. نیاز برای هرس از این واقعیت ناشی می شود که درختان تصمیم ممکن است در برخی شرایط بسیار پیچیده شوند. برخی از شاخه های اضافی در آن درخت به پیچیدگی مدل می افزایند. برای دور زدن این موضوع، از هرس آلفا-بتا استفاده میشود که کامپیوتر را از بررسی کل درخت نجات میدهد. الگوریتم توسط این گره های غیر معمول کند می شود. در نتیجه حذف این گره ها، الگوریتم کارآمدتر می شود.
پیکربندی کلی(نسخه MIN):
ما در نودی مثل n مقدار MIN-VALUE را محاسبه میکنیم.
فرض کنید a بیشترین مقداری باشد که تابع MAX بالایی تا کنون کسب کرده است.
ما میخواهیم توی فرزندان n بگردیم.
اگر مقادیر یکی از فرزندان n از a کمتر باشد , نیازی به محاسبه ی بقیه ی فرزندان نیست.
نسخه MAX قریبنه حالت بالا است.
📣👨💻 @AlgorithmDesign_DataStructuer
👍1