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

👨‍💻Admin👉 @Se_mohamad
Download Telegram
تریپ (Treap) یک نوع خاص از درخت جستجوی دودویی متوازن است که به روشی خلاقانه از دو ساختار استفاده می‌کند: درخت جستجوی دودویی (BST) و (Max-Heap). هدف اصلی تریپ این است که توازن درخت حفظ شود، اما این کار را با استفاده از تصادفی‌سازی انجام می‌دهد، به‌جای الگوریتم‌های پیچیده‌ای مانند درخت‌های AVL یا Red-Black. به همین دلیل، درخت ممکن است در هر لحظه متوازن نباشد، ولی به احتمال زیاد در مجموع کارایی خوبی دارد.


1. کلید (Key): برای ترتیب‌گذاری از قوانین درخت جستجوی دودویی پیروی می‌کند. یعنی هر گره در سمت چپ کوچکتر و در سمت راست بزرگتر از گره والد است. 📊⬅️📉➡️
2. اولویت (Priority): به هر گره به‌صورت تصادفی یک مقدار اولویت اختصاص داده می‌شود که از قوانین پشته بیشینه (Max-Heap) پیروی می‌کند. یعنی هر گره دارای اولویتی کمتر یا مساوی گره والد خود است. 🎲⬆️

این ترکیب به تریپ اجازه می‌دهد که به‌صورت تصادفی توازن خوبی داشته باشد و پیچیدگی زمانی عملیات‌های جستجو، درج و حذف به‌طور میانگین O(log n) باشد.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
‍ پرسودترین معامله زندگی
حال خوب راجایگزين
حال بدکردن است.
همـین
حال دلتون خوب وجودتون
سبز وسلامت
زندگیتون غرق درخوشبختی😊
صبح شنبتون بخیر و نیکی

📣👨‍💻 @AlgorithmDesign_DataStructuer
برای مطالعه مؤثر بخش‌های ریاضی مقالات هوش مصنوعی و جلوگیری از احساس خستگی و بی‌حوصلگی، می‌توانیم یک روش کارآمد را دنبال کنیم. در این روش، به جای غرق شدن در فرمول‌ها و روابط پیچیده، باید ابتدا روی فهم مفاهیم کلیدی تمرکز کنیم. توجه داشته باشید که این بخش‌های ریاضی از مهم‌ترین قسمت‌های مقالات هوش مصنوعی هستند، زیرا اغلب بیانگر چگونگی عملکرد مدل‌ها و الگوریتم‌ها هستند. به همین دلیل، بهتر است با رویکردی منظم و مرحله‌به‌مرحله به سراغشان برویم.

راهکار پیشنهادی:

1. مرور کلی مقاله: ابتدا یک دید کلی از مقاله بگیرید و بخش‌های کلیدی آن را مشخص کنید.
2. تمرکز روی مفاهیم اصلی: به جای تحلیل تمام جزئیات ریاضی، ابتدا سعی کنید مفهوم کلی پشت آن فرمول‌ها را درک کنید. برای این کار، می‌توانید به دنبال توضیحات کلامی باشید.
3. تقسیم‌بندی بخش‌های پیچیده: بخش‌های ریاضیاتی را به قسمت‌های کوچک‌تر تقسیم کنید و هر قسمت را جداگانه بررسی کنید.
4. مرور منابع مکمل: در صورت نیاز، منابع آموزشی دیگر مانند ویدئوها یا کتاب‌ها را برای درک بهتر مفاهیم پیچیده استفاده کنید.
5. حل تمرین و مثال: سعی کنید از مثال‌های عملی و تمرین‌ها برای تثبیت بهتر مطالب استفاده کنید.

🔍 نتیجه: این راهکارها به شما کمک می‌کنند تا به جای تسلیم شدن در برابر بخش‌های ریاضی، آن‌ها را به روشی منطقی و قابل‌فهم بررسی کنید و در نتیجه بهره‌وری بیشتری از مطالعه مقالات داشته باشید.

همیشه به خاطر داشته باشید که بخش ریاضیاتی، ابزار اصلی برای درک عملکرد الگوریتم‌ها است و با گذر زمان، خواندن آن‌ها برایتان ساده‌تر می‌شود!

لینک ویدئو:
https://www.youtube.com/watch?v=YXWxVxQ6AeY

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
الگوریتم Kruskal برای یافتن درخت پوشای کمینه (Minimum Spanning Tree - MST)

الگوریتم Kruskal یکی از معروف‌ترین روش‌ها برای یافتن درخت پوشای کمینه در یک گراف وزن‌دار است. درخت پوشای کمینه یک زیرمجموعه از یال‌های گراف است که تمام رأس‌ها را به هم متصل کرده و مجموع وزن یال‌ها را به کمترین مقدار می‌رساند. این الگوریتم از نوع حریصانه (Greedy) است، یعنی در هر مرحله بهترین انتخاب ممکن را انجام می‌دهد تا به نتیجه بهینه برسد.



🌟 گام‌های الگوریتم Kruskal:

1. مرتب‌سازی یال‌ها: ابتدا تمام یال‌های گراف را به ترتیب وزن از کم به زیاد مرتب می‌کنیم.

2. ایجاد مجموعه‌های ناپیوسته: برای هر رأس یک مجموعه مجزا تشکیل می‌دهیم (در ابتدا هر رأس به تنهایی یک مجموعه است).

3. اضافه کردن یال‌ها به MST:
- یال‌ها را یکی یکی از کمترین وزن به بزرگترین بررسی می‌کنیم.
- اگر اضافه کردن یک یال باعث ایجاد حلقه نشود، آن را به درخت پوشا اضافه می‌کنیم.
- اگر یال باعث ایجاد حلقه شود، آن را نادیده می‌گیریم.

4. اتمام الگوریتم: این روند تا زمانی ادامه دارد که تمام رأس‌ها به هم متصل شده و یک درخت پوشای کمینه ساخته شود.



⏱️ پیچیدگی زمانی الگوریتم:

الگوریتم Kruskal شامل دو بخش اصلی است:

1. مرتب‌سازی یال‌ها: با استفاده از الگوریتم‌های مرتب‌سازی سریع مانند Merge Sort یا Quick Sort، پیچیدگی زمانی این مرحله O(Elog E) است که E تعداد یال‌های گراف است.

2. جستجوی مجموعه‌ها و ترکیب آن‌ها: برای مدیریت مجموعه‌ها از ساختار داده‌ای Union-Find استفاده می‌شود که با بهینه‌سازی‌هایی مانند فشرده‌سازی مسیر (Path Compression) و اتحاد بر اساس رتبه (Union by Rank)، پیچیدگی زمانی این عملیات‌ها به O(α(V)) کاهش می‌یابد.

به طور کلی، پیچیدگی زمانی الگوریتم برابر است با:


O(E log E + E α(V))


که در آن E تعداد یال‌ها و V تعداد رأس‌های گراف است. از آنجایی که E log E سریع‌تر از E α(V) رشد می‌کند، پیچیدگی زمانی کلی O(E log E) است.



📊 ویژگی‌ها و کاربردها:

- نوع الگوریتم: حریصانه (Greedy)
- کاربردها:
- ساخت درخت پوشای کمینه در شبکه‌های ارتباطی.
- کاهش هزینه‌های طراحی شبکه.
- حل مسائل بهینه‌سازی گراف‌ها.

- محدودیت‌ها:
- مناسب برای گراف‌های پراکنده (Sparse). برای گراف‌های متراکم (Dense)، الگوریتم‌های دیگر مانند Prim ممکن است عملکرد بهتری داشته باشند.



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

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
یادآوری مهم برای ثبت‌نام کنکور کارشناسی ارشد

دوستان عزیز،
به اطلاع می‌رساند مهلت ثبت‌نام برای کنکور کارشناسی ارشد از ۲۲ مهر ۱۴۰۳ تا ۲۸ مهر ۱۴۰۳ می‌باشد. لطفاً برای جلوگیری از هرگونه مشکل در آخرین لحظات، هرچه سریع‌تر نسبت به ثبت‌نام خود اقدام نمایید.

🔹 مهلت ثبت‌نام: ۲۲ مهر ۱۴۰۳ تا ۲۸ مهر ۱۴۰۳
🔹 وب‌سایت ثبت‌نام: (سایت سنجش)


در صورت بروز هرگونه مشکل یا نیاز به راهنمایی، می‌توانید با ما در تماس باشید. موفقیت شما برای ما مهم است!

💠 https://t.me/Se_mohamad
استفاده از گراف‌ها یکی از قوی‌ترین ابزارها برای حل مسائل پیچیده است. دلایل متعددی برای این استفاده وجود دارد که به طور خلاصه به آن‌ها می‌پردازیم:

1. مدل‌سازی ساختارهای پیچیده 🔄
گراف‌ها به ما اجازه می‌دهند تا روابط پیچیده بین اشیاء را به‌صورت ساده و قابل درک نشان دهیم. به عنوان مثال:
- در شبکه‌های اجتماعی 👥، کاربران به عنوان گره‌ها و دوستی‌ها به عنوان یال‌ها نمایش داده می‌شوند.
- در شبکه‌های حمل‌ونقل 🚗، شهرها گره‌ها و جاده‌ها یال‌ها هستند.

2. حل مسائل مسیریابی و بهینه‌سازی 🚦
گراف‌ها ابزاری عالی برای یافتن بهترین مسیر هستند:
- در الگوریتم‌های مسیریابی 📍، مانند الگوریتم دایکسترا (Dijkstra)، کوتاه‌ترین مسیر بین دو گره در گراف محاسبه می‌شود.
- مسئله فروشنده دوره‌گرد 🤹، که به دنبال کم‌هزینه‌ترین مسیر بازدید از تمام شهرها است.

3. نمایش روابط پیچیده 🔗
گراف‌ها به‌خوبی روابط پیچیده میان داده‌ها را نشان می‌دهند. برای مثال، در تحلیل شبکه‌های اجتماعی 🌐 یا تعاملات بیولوژیکی 🧬 بین ژن‌ها و پروتئین‌ها، می‌توان تعاملات چندگانه را به وضوح مشاهده کرد.

4. کاربردهای گسترده در علوم مختلف 🌍
گراف‌ها در زمینه‌های گوناگون به کار می‌روند:
- هوش مصنوعی 🤖 و یادگیری ماشین برای مدل‌سازی و پردازش زبان طبیعی.
- زیست‌شناسی 🧬 برای بررسی تعاملات ژنتیکی.
- مهندسی نرم‌افزار 💻 برای نمایش وابستگی‌ها بین ماژول‌ها.

5. الگوریتم‌های کارآمد ⚙️
گراف‌ها به ما امکان می‌دهند تا مسائل پیچیده را با الگوریتم‌های کارآمد حل کنیم:
- الگوریتم BFS 🔍 (جستجوی سطح به سطح) و الگوریتم DFS 🔎 (جستجوی عمقی) برای پیمایش و جستجوی گراف‌ها.

6. حل مسائل پویایی شبکه‌ها 🌐
گراف‌ها می‌توانند پویایی شبکه‌ها را در طول زمان مدل‌سازی کنند:
- گراف‌های زمانی برای نمایش تغییرات سیستم‌ها.
- الگوریتم‌های جریان بیشینه 💧 برای مدیریت بهینه جریان‌ها در شبکه‌ها مانند توزیع انرژی.

7. کاربردهای عملی و روزمره 📱
در زندگی روزمره هم گراف‌ها نقش دارند:
- مسیریابی GPS 🗺 برای یافتن بهترین مسیر بین نقاط مختلف.
- مدیریت شبکه‌های توزیع 🏗 برای اطمینان از تخصیص بهینه منابع.

نتیجه‌گیری ✔️
به طور کلی، گراف‌ها به دلیل سادگی در نمایش و حل مسائل مرتبط با روابط و اتصالات، ابزاری فوق‌العاده برای یافتن راه‌حل‌های بهینه هستند و در بسیاری از زمینه‌های علمی و کاربردی استفاده می‌شوند.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
"دوره رایگان AI Python برای مبتدیان، برای مدت محدود توسط آندره"

https://www.deeplearning.ai/short-courses/ai-python-for-beginners/
#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
هرکسی ازتون پرسید مشتق و انتگرال کجا بدرد میخوره این ویدیو رو نشونش بدید

هنر مهندسی یعنی یه جسم ۳۵۰۰ تنی رو با سرعت ۶ هزار کیلومتر به سمت زمین برگردونی و اینجوری بگیری بغلت. زنده باد علم...

@silicon_brain | از هوش مصنوعی عقب نمانید
اگر تازه‌کار هستید، بسیار مهم است که اهمیت ساختارهای داده و الگوریتم‌ها را در آمادگی خود برای ورود به مسیر نرم‌افزار درک کنید. در اینجا یک نقشه راه جامع ارائه شده است که می‌توانید با هر زبان برنامه‌نویسی از آن استفاده کنید. اگر به دنبال گسترش مهارت‌های خود در حوزه علم داده هستید، می‌توانید از طریق زبان برنامه‌نویسی پایتون 🐍 اقدام کنید.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
📑 - دوره ی تدریس سیگنال و سیستم ها
♾️ - مدرس: پروفسور آلن وی اوپنهایم
🏛 مؤسسه فناوری ماساچوست 𝐌𝐈𝐓

https://ocw.mit.edu/courses/res-6-007-signals-and-systems-spring-2011/download/


📣👨‍💻 @AlgorithmDesign_DataStructuer
پایتورچ را به صورت رایگان (و با کیفیت) یاد بگیرید!
یک دوره عالی برای یادگیری پایتورچ پیدا کردم که واقعا ارزشمند است. خواستم آن را با شما به اشتراک بگذارم.

https://howsam.org/downloads/pytorch-course/

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
اگر به دنبال یک منبع عالی برای مرور سریع الگوریتم‌ها و ساختارهای داده هستید، Algorithms and Data Structures Cheatsheet رو از دست ندید! این سایت یک راهنمای جامع و مختصر ارائه میده که بهتون کمک می‌کنه مفاهیم کلیدی رو به سرعت یاد بگیرید یا مرور کنید. حتماً بهش سر بزنید و از مطالبش بهره‌مند بشید!

https://algs4.cs.princeton.edu/cheatsheet/

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
ویژن ترنسفورمر (Vision Transformer یا به اختصار ViT) یک معماری مدل است که ترنسفورمرها، که در اصل برای پردازش زبان‌های طبیعی (NLP) طراحی شده‌اند، را برای داده‌های تصویری به کار می‌گیرد. برخلاف شبکه‌های عصبی کانولوشنی (CNNs) که سال‌ها در این زمینه غالب بوده‌اند، ویژن ترنسفورمرها نیازی به استفاده از کانولوشن‌ها برای پردازش تصاویر ندارند. به جای آن، تصاویر را به چندین بخش (پچ) تقسیم کرده، این پچ‌ها را مانند توالی‌های کلمات در نظر می‌گیرند، و سپس مدل ترنسفورمر را برای استخراج ویژگی‌ها به کار می‌گیرند.

ایده اصلی در اینجا ساده اما قدرتمند است: همان‌طور که ترنسفورمرها در درک روابط بین کلمات یک جمله عالی هستند، می‌توانند روابط بین بخش‌های مختلف یک تصویر را نیز یاد بگیرند. این موضوع به ViT‌ها امکان می‌دهد که زمینه‌ی کلی تصویر را با کارایی بیشتری نسبت به CNNها درک کنند.

Paper https://arxiv.org/abs/2010.11929
code https://github.com/google-research/vision_transformer

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
انواع گراف :

1. بدون جهت (Undirected): یال‌ها بدون جهت. 🎯
2. جهت‌دار (Directed): یال‌ها با جهت مشخص. ➡️
3. خلوت (Sparse): یال‌ها نسبت به گره‌ها کم. 🌿
4. متراکم (Dense): یال‌ها نسبت به گره‌ها زیاد. 🏗
5. بدون وزن (Unweighted): یال‌ها بدون وزن. ⚖️
6. وزندار (Weighted): یال‌ها وزندار. 🏋️
7. بدون دور (Acyclic): بدون دور. 🚫🔄
8. چرخه‌ای (Cyclic): دارای دور. 🔄
9. ساده (Simple): بدون حلقه یا یال موازی.
10. غیر ساده (Non-simple): با حلقه یا یال موازی. 🚧
11. بدون برچسب (Unlabeled): بدون برچسب. 🏷
12. برچسب‌دار (Labeled): با برچسب. 🏷

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
ترانسفورمر دیفرانسیلی در مقابل ترانسفورمر معمولی

ترانسفورمر معمولی 🎯 تمایل به توجه به زمینه‌های نامربوط دارد، در حالی که ترانسفورمر دیفرانسیلی 🔍 توجه را به زمینه‌های مرتبط تقویت می‌کند و نویز را حذف می‌کند (بی‌توجهی به زمینه‌های نامربوط).

چگونه ترانسفورمر دیفرانسیلی زمینه‌های نامربوط را نادیده می‌گیرد؟

- مکانیزم توجه دیفرانسیلی (differential attention) نمرات توجه را به‌عنوان تفاوت بین دو نقشه توجه softmax جداگانه محاسبه می‌کند.
- این تفریق، نویز را حذف کرده و باعث ایجاد الگوهای توجه پراکنده می‌شود. 🌿

مزایای ترانسفورمر دیفرانسیلی

- ترانسفورمر دیفرانسیلی (DIFF Transformer) در مقایسه با ترانسفورمر معمولی در مقیاس‌های مختلف، چه از نظر افزایش اندازه مدل و چه از نظر تعداد داده‌های آموزشی، عملکرد بهتری دارد.
- مهم‌تر از آن، در کاربردهای عملی مانند مدل‌سازی با زمینه طولانی (long-context modeling) و بازیابی اطلاعات کلیدی (key information retrieval) مزیت‌های قابل توجهی دارد. 🧠📚

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
این ابزار برای کسانی که از PyTorch استفاده می‌کنند.

معرفی روش : VisualTorch
یک ابزار اپن‌سورس در پایتون که به شما امکان می‌دهد مدل‌های PyTorch را خیلی سریع و آسان بصری‌سازی کنید.
به جای بررسی دستی شبکه‌های عصبی‌تان، با این ابزار می‌توانید لایه‌ها، پارامترها و گراف‌های محاسباتی را به‌صورت تصویری مشاهده کنید. این کار به شما کمک می‌کند تا سریع‌تر دیباگ کرده و مدل‌هایتان را بهینه‌تر تنظیم کنید.

🔗 برای دانلود و استفاده، فقط کافیست به گیت‌هاب زیر مراجعه کنید 👇
https://github.com/willyfh/visualtorch

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
یک Heap یک نوع داده ساختار درختی است که ویژگی‌های زیر را دارد:

🌳 ساختار کامل: یک heap همیشه یک درخت کامل است، به این معنی که تمام سطوح آن (به جز آخرین سطح) به طور کامل پر شده‌اند و همه گره‌ها در آخرین سطح به سمت چپ قرار دارند.

⚖️ ویژگی heap:
- Max-Heap: در هر گره، مقدار والد بزرگتر یا مساوی مقدار فرزندانش است. بنابراین، بزرگترین عنصر در ریشه قرار دارد.
- Min-Heap: در هر گره، مقدار والد کوچکتر یا مساوی مقدار فرزندانش است. بنابراین، کوچکترین عنصر در ریشه قرار دارد.

🚀 دسترسی سریع به ریشه: در heap، عنصر ریشه همیشه بزرگترین (در max-heap) یا کوچکترین (در min-heap) عنصر است که دسترسی به آن با زمان ثابت O(1) انجام می‌شود.

🛠 درج و حذف: عملیات درج و حذف در heap به صورت منطقی انجام می‌شود، به طوری که پس از هر عملیات، ساختار درخت و ویژگی heap حفظ می‌شود. این عملیات معمولاً در زمان O(log n) انجام می‌شوند، زیرا باید از ریشه به برگ یا بالعکس پیمایش کنیم.

💡 کاربردها:
- صف اولویت: heap اغلب برای پیاده‌سازی صف‌های اولویت استفاده می‌شود.
- الگوریتم‌های مرتب‌سازی: مثل Heap Sort که از ویژگی‌های heap برای مرتب‌سازی داده‌ها استفاده می‌کند.
- الگوریتم‌های مسیریابی: مثل الگوریتم دیکسترا برای پیدا کردن کوتاه‌ترین مسیرها.

این ویژگی‌ها heap را به یک داده ساختار کارآمد برای بسیاری از کاربردها تبدیل کرده‌اند. 🎯

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
دموکراتیزه کردن کارآمد مدل‌های زبانی بزرگ (LLMs) پزشکی برای ۵۰ زبان از طریق ترکیبی از متخصصان خانواده‌های زبانی

Github: https://github.com/freedomintelligence/apollomoe

Paper: https://arxiv.org/abs/2410.10626v1

Dataset: https://paperswithcode.com/dataset/mmlu

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
ساختمان_داده-خلاصه-نصیر.pdf
738.1 KB
جزوه‌ای جامع و خلاصه از درس ساختمان داده از دانشگاه خواجه نصیرالدین طوسی، عالی برای مرور مطالب و همراه با نمونه سوالات کاربردی. 📝🔍
یک منبع مفید و ارزشمند برای آمادگی بهتر در امتحانات! 📚🚀

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer