الگوریتم Longest Common Subsequence (LCS) یکی از مسائل پایهای در نظریه رشتهها و الگوریتمهای پویا است. این الگوریتم طولانیترین زیررشتهی مشترک بین دو رشته را پیدا میکند که نیازی به پیوسته بودن ندارد اما ترتیب کاراکترها باید حفظ شود.
کاربردهای اصلی:
1. مقایسه و تشخیص شباهت رشتهها: در بررسی متون، رشتههای DNA، یا مقایسهی کدها استفاده میشود.
2. ویرایش فاصله (Edit Distance): محاسبه تعداد عملیات لازم (افزودن، حذف یا تغییر) برای تبدیل یک رشته به دیگری.
3. تطبیق نسخههای فایلها: در ابزارهایی مثل Git برای بررسی تغییرات بین نسخههای مختلف فایلها کاربرد دارد.
روش حل:
الگوریتم LCS با استفاده از برنامهریزی پویا حل میشود و یک جدول دو بعدی برای ذخیره طول LCS تا هر نقطه از رشتهها تشکیل میدهد.
پیچیدگی زمانی:
این الگوریتم با پیچیدگی زمانی O(n * m) اجرا میشود که در آن
مثال:
رشتههای
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
کاربردهای اصلی:
1. مقایسه و تشخیص شباهت رشتهها: در بررسی متون، رشتههای DNA، یا مقایسهی کدها استفاده میشود.
2. ویرایش فاصله (Edit Distance): محاسبه تعداد عملیات لازم (افزودن، حذف یا تغییر) برای تبدیل یک رشته به دیگری.
3. تطبیق نسخههای فایلها: در ابزارهایی مثل Git برای بررسی تغییرات بین نسخههای مختلف فایلها کاربرد دارد.
روش حل:
الگوریتم LCS با استفاده از برنامهریزی پویا حل میشود و یک جدول دو بعدی برای ذخیره طول LCS تا هر نقطه از رشتهها تشکیل میدهد.
پیچیدگی زمانی:
این الگوریتم با پیچیدگی زمانی O(n * m) اجرا میشود که در آن
n
و m
طول رشتههای ورودی هستند.مثال:
رشتههای
ABCBDAB
و BDCAB
را در نظر بگیرید. LCS این دو رشته زیررشتهی BCAB
با طول ۴ است.#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
مقاله با عنوان "SAM2Long: Enhancing SAM 2 for Long Video Segmentation with a Training-Free Memory Tree" احتمالاً بهبودهایی در روش SAM 2 برای بخشبندی ویدئوهای طولانی را بررسی میکند. این بهبودها شامل استفاده از درخت حافظه بدون نیاز به آموزش است.
Github: https://github.com/mark12ding/sam2long
Paper: https://arxiv.org/abs/2410.16268v1
HF: https://huggingface.co/papers/2410.16268
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
Github: https://github.com/mark12ding/sam2long
Paper: https://arxiv.org/abs/2410.16268v1
HF: https://huggingface.co/papers/2410.16268
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
ریاضیات یادگیری ماشین:
چه تازه با یادگیری ماشین آشنا شده باشید و چه بخواهید دانش ریاضی خود را تقویت کنید، این مجموعه از منابع به شما کمک خواهد کرد. به مباحث مهمی مانند جبر خطی، حساب دیفرانسیل و بهینهسازی بپردازید تا پایههای قوی برای الگوریتمهای یادگیری ماشین بسازید.
https://github.com/dair-ai/Mathematics-for-ML
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
چه تازه با یادگیری ماشین آشنا شده باشید و چه بخواهید دانش ریاضی خود را تقویت کنید، این مجموعه از منابع به شما کمک خواهد کرد. به مباحث مهمی مانند جبر خطی، حساب دیفرانسیل و بهینهسازی بپردازید تا پایههای قوی برای الگوریتمهای یادگیری ماشین بسازید.
https://github.com/dair-ai/Mathematics-for-ML
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
استنفورد بهتازگی سخنرانی جدیدی با عنوان «ساخت مدلهای زبانی بزرگ (LLMs)» منتشر کرده است. تماشای این ویدئو را به همه توصیه میکنم.
«این سخنرانی نمای کلی و مختصری از فرآیند ساخت مدلی شبیه به ChatGPT ارائه میدهد که شامل پیشآموزش (مدلسازی زبان) و پسآموزش (تنظیم دقیق با دادههای برچسبدار و تقویت یادگیری از طریق بازخورد انسانی) است.
در هر بخش، به بررسی روشهای رایج جمعآوری دادهها، الگوریتمها و روشهای ارزیابی پرداخته میشود.»
https://www.youtube.com/watch?v=9vM4p9NN0Ts
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
«این سخنرانی نمای کلی و مختصری از فرآیند ساخت مدلی شبیه به ChatGPT ارائه میدهد که شامل پیشآموزش (مدلسازی زبان) و پسآموزش (تنظیم دقیق با دادههای برچسبدار و تقویت یادگیری از طریق بازخورد انسانی) است.
در هر بخش، به بررسی روشهای رایج جمعآوری دادهها، الگوریتمها و روشهای ارزیابی پرداخته میشود.»
https://www.youtube.com/watch?v=9vM4p9NN0Ts
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
Large Language Model Course
https://github.com/mlabonne/llm-course?tab=readme-ov-file
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
https://github.com/mlabonne/llm-course?tab=readme-ov-file
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
📚 مسیر یادگیری ساختمان دادهها و الگوریتمها 💡
آمادهای تا هوش و خلاقیت خودت رو به چالش بکشی؟ 🚀 با یادگیری مفاهیمی مثل لیستهای پیوندی، پشتهها، صفها، گرافها، درختها و بسیاری از الگوریتمهای جذاب دیگه، میتونی قدم به دنیای برنامهنویسی حرفهای بذاری! 🔥
از الگوریتمهای حریصانه تا برنامهنویسی پویا، همه اینها ابزارهایی هستن که میتونی با حل بیش از 450 مسئله بهشون تسلط پیدا کنی! 🌟
https://www.codechef.com/roadmap/data-structures-and-algorithms
لطفاً این محتوا را با دوستانتان به اشتراک بگذارید تا همه با هم از یادگیری لذت ببریم! 🚀🎯
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
آمادهای تا هوش و خلاقیت خودت رو به چالش بکشی؟ 🚀 با یادگیری مفاهیمی مثل لیستهای پیوندی، پشتهها، صفها، گرافها، درختها و بسیاری از الگوریتمهای جذاب دیگه، میتونی قدم به دنیای برنامهنویسی حرفهای بذاری! 🔥
از الگوریتمهای حریصانه تا برنامهنویسی پویا، همه اینها ابزارهایی هستن که میتونی با حل بیش از 450 مسئله بهشون تسلط پیدا کنی! 🌟
https://www.codechef.com/roadmap/data-structures-and-algorithms
لطفاً این محتوا را با دوستانتان به اشتراک بگذارید تا همه با هم از یادگیری لذت ببریم! 🚀🎯
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
مقدمه سریع و کاربردی گوگل به یادگیری ماشین 🚀، شامل مجموعهای از درسهای آموزنده است که همراه با ویدیوهای آموزشی 🎥، شبیهسازیهای تعاملی 🌀 و تمرینهای عملی 💻 ارائه میشود تا شما را به سرعت در مبانی یادگیری ماشین ماهر کند. این دوره با رویکردی عملی، به شما کمک میکند تا با مفاهیم کلیدی یادگیری ماشین آشنا شوید و آنها را در دنیای واقعی به کار بگیرید 🌍.
https://developers.google.com/machine-learning/crash-course
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
https://developers.google.com/machine-learning/crash-course
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
وقتی LaTeX با شبکه عصبی ترکیب میشود
PlotNeuralNet
✅ اگر میخواهید شبکههای عصبی خود را با دقت و کیفیت مقالات علمی ترسیم کنید، PlotNeuralNet یک گزینه عالی است.
✅ این ابزار با استفاده از LaTeX به شما امکان میدهد تا مدلها و لایههای شبکه عصبی را با جزئیات و به صورت کاملاً قابل تنظیم نمایش دهید.
✅ نتیجه؟ یک تصویر واضح و دقیق که همه اجزای شبکه را به زیبایی و دقت نمایش میدهد.
میخای ازش استفاده کنی؟ رو لینک زیر کلیک کن 👇
https://github.com/HarisIqbal88/PlotNeuralNet
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
PlotNeuralNet
✅ اگر میخواهید شبکههای عصبی خود را با دقت و کیفیت مقالات علمی ترسیم کنید، PlotNeuralNet یک گزینه عالی است.
✅ این ابزار با استفاده از LaTeX به شما امکان میدهد تا مدلها و لایههای شبکه عصبی را با جزئیات و به صورت کاملاً قابل تنظیم نمایش دهید.
✅ نتیجه؟ یک تصویر واضح و دقیق که همه اجزای شبکه را به زیبایی و دقت نمایش میدهد.
میخای ازش استفاده کنی؟ رو لینک زیر کلیک کن 👇
https://github.com/HarisIqbal88/PlotNeuralNet
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
Insertion-Sort
الگوریتم مرتبسازی درج (Insertion Sort) یکی از الگوریتمهای ساده مرتبسازی است که شباهت زیادی به مرتب کردن کارتهای بازی 🃏 در دست دارد. فرض کنید اولین کارت بهطور پیشفرض مرتب است و سپس کارتهای نامرتب دیگر را به ترتیب انتخاب میکنیم. اگر کارت انتخابشده بزرگتر از کارتهای مرتبشده قبلی باشد، در سمت راست آن قرار میگیرد و در غیر این صورت در سمت چپ 🡐🡒. این روند ادامه دارد تا همه کارتها به درستی مرتب شوند.
در الگوریتم مرتبسازی درج نیز همین ایده به کار گرفته میشود. ابتدا یک عنصر انتخاب میشود و سپس در میان عناصر مرتبشده جستجو میشود تا جایگاه مناسب آن پیدا شود. با وجود سادگی، این روش برای مجموعه دادههای بزرگ کارایی خوبی ندارد، زیرا پیچیدگی زمانی آن در حالت متوسط و بدترین حالت برابر با O(n²) است ⏳. الگوریتمهای مرتبسازی دیگر مثل Heap Sort**، **Quick Sort و Merge Sort عملکرد بهتری دارند 🚀.
با این حال، مرتبسازی درج چند مزیت دارد:
- پیادهسازی ساده ✅
- کارایی مناسب برای مجموعه دادههای کوچک 🧮
- سازگاری با دادههای تا حد زیادی مرتب 🔄
الگوریتم:
مراحل ساده الگوریتم مرتبسازی درج به شکل زیر است:
1️⃣. اگر عنصر اولین عنصر است، فرض میشود که مرتب است. به مرحله بعد بروید.
2️⃣. عنصر بعدی را انتخاب کرده و در یک متغیر کلیدی ذخیره کنید 🔑.
3️⃣. کلید را با همه عناصر موجود در آرایه مرتبشده مقایسه کنید.
4️⃣. اگر عنصر موجود در آرایه مرتبشده از کلید کوچکتر است، به عنصر بعدی بروید 🡒. در غیر این صورت، عناصر بزرگتر را به سمت راست منتقل کنید 🡐.
5️⃣. کلید را در جایگاه مناسب خود درج کنید ✔️.
6️⃣. این روند را تا مرتب شدن کل آرایه ادامه دهید.
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
در الگوریتم مرتبسازی درج نیز همین ایده به کار گرفته میشود. ابتدا یک عنصر انتخاب میشود و سپس در میان عناصر مرتبشده جستجو میشود تا جایگاه مناسب آن پیدا شود. با وجود سادگی، این روش برای مجموعه دادههای بزرگ کارایی خوبی ندارد، زیرا پیچیدگی زمانی آن در حالت متوسط و بدترین حالت برابر با O(n²) است ⏳. الگوریتمهای مرتبسازی دیگر مثل Heap Sort**، **Quick Sort و Merge Sort عملکرد بهتری دارند 🚀.
با این حال، مرتبسازی درج چند مزیت دارد:
- پیادهسازی ساده ✅
- کارایی مناسب برای مجموعه دادههای کوچک 🧮
- سازگاری با دادههای تا حد زیادی مرتب 🔄
الگوریتم:
مراحل ساده الگوریتم مرتبسازی درج به شکل زیر است:
1️⃣. اگر عنصر اولین عنصر است، فرض میشود که مرتب است. به مرحله بعد بروید.
2️⃣. عنصر بعدی را انتخاب کرده و در یک متغیر کلیدی ذخیره کنید 🔑.
3️⃣. کلید را با همه عناصر موجود در آرایه مرتبشده مقایسه کنید.
4️⃣. اگر عنصر موجود در آرایه مرتبشده از کلید کوچکتر است، به عنصر بعدی بروید 🡒. در غیر این صورت، عناصر بزرگتر را به سمت راست منتقل کنید 🡐.
5️⃣. کلید را در جایگاه مناسب خود درج کنید ✔️.
6️⃣. این روند را تا مرتب شدن کل آرایه ادامه دهید.
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
اگر به دنبال منبعی برای درک فرآیند تنظیم دقیق (fine-tuning) مدلهای زبان بزرگ (LLMs) هستید، یک نوتبوک وجود دارد که مراحل تنظیم دقیق را از پایه پیادهسازی میکند:
https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
در این نوتبوک به موارد زیر پرداخته شده است:
1. چگونگی قالببندی دادهها به 1100 جفت دستور-پاسخ
2. نحوه استفاده از قالبهای مبتنی بر پرامپت
3. و چگونگی بهکارگیری ماسکگذاری.
همچنین یک بخش برای پیادهسازی یک فرآیند خودکار مبتنی بر LLM جهت ارزیابی نیز در نظر گرفته شده است.
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
در این نوتبوک به موارد زیر پرداخته شده است:
1. چگونگی قالببندی دادهها به 1100 جفت دستور-پاسخ
2. نحوه استفاده از قالبهای مبتنی بر پرامپت
3. و چگونگی بهکارگیری ماسکگذاری.
همچنین یک بخش برای پیادهسازی یک فرآیند خودکار مبتنی بر LLM جهت ارزیابی نیز در نظر گرفته شده است.
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
سلام دوستان عزیز 🌟
اگر در انجام تمرینات یا پروژههای خود نیاز به کمک دارید، ما آمادهایم تا با مناسبترین قیمت در کنارتان باشیم. هر زمان که نیاز به راهنمایی یا انجام پروژههایتان داشتید، روی ما حساب کنید! 👨💻💡
🆔 : @se_mohamad
اگر در انجام تمرینات یا پروژههای خود نیاز به کمک دارید، ما آمادهایم تا با مناسبترین قیمت در کنارتان باشیم. هر زمان که نیاز به راهنمایی یا انجام پروژههایتان داشتید، روی ما حساب کنید! 👨💻💡
🆔 : @se_mohamad
در اینجا توابع اصلی برای کار با ساختار داده پشته (stack) در زبان پایتون را آوردهام. این توابع شامل عملیاتهای اساسی مانند اضافه کردن (push)، حذف کردن (pop)، بررسی تهی بودن پشته و مشاهده عنصر بالای پشته هستند.
نحوه استفاده
میتوانید از این کلاس برای ایجاد یک پشته و کار با توابع آن استفاده کنید:
این کد عملکردهای اصلی برای مدیریت پشته را به شما ارائه میدهد.
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
class Stack:
def __init__(self):
self.items = []
# اضافه کردن عنصر به بالای پشته
def push(self, item):
self.items.append(item)
# حذف و بازگرداندن عنصر بالای پشته
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
return "Stack is empty"
# بازگرداندن عنصر بالای پشته بدون حذف آن
def peek(self):
if not self.is_empty():
return self.items[-1]
else:
return "Stack is empty"
# بررسی تهی بودن پشته
def is_empty(self):
return len(self.items) == 0
# بازگرداندن تعداد عناصر موجود در پشته
def size(self):
return len(self.items)
نحوه استفاده
میتوانید از این کلاس برای ایجاد یک پشته و کار با توابع آن استفاده کنید:
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print("Top item:", stack.peek()) # نمایش عنصر بالای پشته
print("Size:", stack.size()) # نمایش تعداد عناصر
print("Pop item:", stack.pop()) # حذف عنصر بالای پشته
print("Is empty?", stack.is_empty()) # بررسی تهی بودن پشته
این کد عملکردهای اصلی برای مدیریت پشته را به شما ارائه میدهد.
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
Time Complexity.pdf
618.8 KB
جزوهای جامع از پیچیدگی زمانی به همراه نمونه کد! 📈 اگر در درک پیچیدگی زمانی الگوریتمها مشکل داری یا دنبال مثالهایی واقعی هستی، این جزوه میتونه کمکت کنه تا با پیچیدگیهای مختلف آشنا بشی و یاد بگیری چطور کدها رو بهینه کنی. مناسب برای دانشجویان و علاقهمندان به برنامهنویسی و الگوریتم 💻
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
مراحل اصلی آموزش مدلهای زبانی بزرگ (مثل GPT-4):
1. جمعآوری دادهها: متون وسیع برای یادگیری الگوهای زبانی 📚
2. تبدیل به توکن: تقسیم متن به اجزای کوچکتر برای پردازش بهتر 🧩
3. آموزش شبکه عصبی: یادگیری پیشبینی توکن بعدی و بهینهسازی مدل 🧠
4. تنظیم دقیق: بهبود مدل برای کارهای خاص 📈
5. یادگیری تقویتی: بهبود پاسخها با بازخورد انسانی 🤝
آموزش مدلهای بزرگ منابع محاسباتی زیادی میخواهد، اما نتیجهشان تولید متنهای همگرا و مرتبط برای کارهای مختلف است! 🚀
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
1. جمعآوری دادهها: متون وسیع برای یادگیری الگوهای زبانی 📚
2. تبدیل به توکن: تقسیم متن به اجزای کوچکتر برای پردازش بهتر 🧩
3. آموزش شبکه عصبی: یادگیری پیشبینی توکن بعدی و بهینهسازی مدل 🧠
4. تنظیم دقیق: بهبود مدل برای کارهای خاص 📈
5. یادگیری تقویتی: بهبود پاسخها با بازخورد انسانی 🤝
آموزش مدلهای بزرگ منابع محاسباتی زیادی میخواهد، اما نتیجهشان تولید متنهای همگرا و مرتبط برای کارهای مختلف است! 🚀
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
این مقاله راهی ساده و مؤثر برای بهبود کیفیت پاسخدهی LLMها ارائه میدهد که در آن مدلها با افزودن سبک Chain-of-Thought به پرامپتها و استفاده از یک مدل داور (LLM Judge) برای ارزیابی پاسخها، یاد میگیرند بهتر "فکر کنند" و پاسخهای دقیقتری بدهند. نتایج نشان میدهد که فاینتیون این مدلها روی دادههای Preference Pairs (با و بدون فکر) عملکردشان را بهطور قابل توجهی بهبود میبخشد و بهبود بیشتری نیز با Thought Preference Optimization (TPO) حاصل میشود.
https://arxiv.org/abs/2410.10630
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
https://arxiv.org/abs/2410.10630
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
دوره "الگوریتم و ساختمان داده" دانشگاه استنفورد، به تدریس اصول الگوریتمها برای افرادی با تجربه پایهای برنامهنویسی میپردازد. این دوره بر درک مفاهیم و دیدگاه کلی تمرکز دارد و کمتر به جزئیات پیادهسازی و مباحث ریاضی میپردازد. تکمیل این دوره به شما کمک میکند تا در مصاحبههای فنی موفق شوید و بتوانید با اطمینان درباره الگوریتمها صحبت کنید.
مدرس دوره، پروفسور تیم راگگاردن، از اساتید برجسته علوم کامپیوتر در دانشگاه استنفورد است و تجربه گستردهای در تدریس و تحقیق در حوزه الگوریتمها دارد.
https://github.com/suhassrivats/Stanford-Data-Structures-and-Algorithms
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
مدرس دوره، پروفسور تیم راگگاردن، از اساتید برجسته علوم کامپیوتر در دانشگاه استنفورد است و تجربه گستردهای در تدریس و تحقیق در حوزه الگوریتمها دارد.
https://github.com/suhassrivats/Stanford-Data-Structures-and-Algorithms
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
دسترسی به صدها کتاب و منابع ارزشمند در حوزه دیتاساینس!
در Witaik، یک بخش کتابخانه راهاندازی شده که قراره بهترین منابع و کتابهای این حوزه رو در اختیار شما قرار بدیم. تا الان چندین کتاب قرار دادیم و هر هفته منابع جدیدی اضافه میکنیم تا این مجموعه به مرور کاملتر بشه. پیشنهاد میکنم این صفحه رو دنبال کنید تا از آپدیتهای هفتگی و کتابهای جدید باخبر بشید.
https://witaik.com/book/programming/
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
در Witaik، یک بخش کتابخانه راهاندازی شده که قراره بهترین منابع و کتابهای این حوزه رو در اختیار شما قرار بدیم. تا الان چندین کتاب قرار دادیم و هر هفته منابع جدیدی اضافه میکنیم تا این مجموعه به مرور کاملتر بشه. پیشنهاد میکنم این صفحه رو دنبال کنید تا از آپدیتهای هفتگی و کتابهای جدید باخبر بشید.
https://witaik.com/book/programming/
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
🔰 Complete DSA Roadmap 🔰
🌐 Basic Data Structures
📂 Arrays
📌 Basics of Array Operations (Insert, Delete, Search)
📌 2D Arrays, Multidimensional Arrays
📂 Strings
📌 Common String Manipulation Techniques
📌 String Matching Algorithms (KMP, Rabin-Karp)
📂 Linked Lists
📌 Singly, Doubly, and Circular Linked Lists
📌 Linked List Operations (Insert, Delete, Reverse)
📂 Stacks
📌 Applications of Stacks (Expression Evaluation, Backtracking)
📂 Queues
📌 Circular Queue, Priority Queue
📌 Deque (Double-ended Queue)
🌐 Advanced Data Structures
📂 Trees
🌳 Binary Trees
🌳 Binary Search Trees
🌳 AVL Trees (Self-Balancing)
🌳 B-Trees (Database Applications)
📂 Graphs
🔍 Graph Representation (Adjacency List, Adjacency Matrix)
🔍 Depth-First Search, Breadth-First Search
🔍 Shortest Path Algorithms (Dijkstra's, Bellman-Ford)
🔍 Minimum Spanning Tree (Prim’s, Kruskal’s)
📂 Heaps
🔺 Min and Max Heap
🔺 Heap Sort
📂 Hash Tables
📂 Disjoint Set Union (Union-Find, Path Compression)
📂 Trie (Efficient Prefix-based Search)
📂 Segment Tree (Range Queries, Lazy Propagation)
📂 Fenwick Tree (Binary Indexed Tree)
🌐 Algorithmic Paradigms
📌 Brute Force
📌 Divide and Conquer (Merge Sort, Quick Sort)
📌 Greedy Algorithms (Optimal Substructure, Real-world Applications)
📌 Dynamic Programming (Overlapping Subproblems)
📌 Backtracking (Recursive Problem Solving, Constraint Satisfaction)
📌 Sliding Window Technique
📌 Two Pointer Technique
📌 Divide and Conquer Optimization (Efficient Range Updates, Segment Trees)
🌐 Searching Algorithms
📌 Linear Search (Basic Search Technique)
📌 Binary Search (Efficient Search on Sorted Data)
📌 Depth-First Search (Graph Traversal)
📌 Breadth-First Search (Graph Traversal)
🌐 Sorting Algorithms
📌 Bubble Sort, Selection Sort, Insertion Sort
📌 Merge Sort, Quick Sort
📌 Heap Sort
🌐 Graph Algorithms
📌 Depth-First Search, Breadth-First Search
📌 Topological Sort (DAG Applications)
📌 Strongly Connected Components (Kosaraju’s, Tarjan’s)
📌 Articulation Points and Bridges
🌐 Dynamic Programming (DP)
📌 Introduction to DP Concepts
📌 Fibonacci Series using DP (Base Case, Recursion, Memoization)
📌 Longest Common Subsequence, Longest Increasing Subsequence
📌 Knapsack Problem (0/1, Fractional, Unbounded)
📌 Matrix Chain Multiplication (Dynamic Partitioning)
📌 Dynamic Programming on Trees
🌐 Mathematical and Bit Manipulation Algorithms
📌 Prime Numbers and Sieve of Eratosthenes
📌 Greatest Common Divisor, Least Common Multiple
📌 Modular Arithmetic, Modular Exponentiation
📌 Bit Manipulation Tricks (Efficient Bitwise Operations)
🌐 Advanced Topics
📌 Trie-based Algorithms
🔍 Auto-completion, Spell Checker
📌 Suffix Trees and Arrays (Efficient String Matching)
📌 Computational Geometry (Convex Hull, Line Intersection)
📌 Number Theory (Modular Arithmetic, Primality Tests)
📌 String Algorithms (Efficient String Matching and Processing)
🌐 Online Platforms
📌 LeetCode (Practice for Coding Interviews)
📌 HackerRank (Competitive Programming Challenges)
این Roadmap شامل مفاهیم اساسی، مسائل رایج و منابع تمرینی است و برای پیگیری هر بخش و پیشرفت در یادگیری کمک میکند! 🌟
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
🌐 Basic Data Structures
📂 Arrays
📌 Basics of Array Operations (Insert, Delete, Search)
📌 2D Arrays, Multidimensional Arrays
📂 Strings
📌 Common String Manipulation Techniques
📌 String Matching Algorithms (KMP, Rabin-Karp)
📂 Linked Lists
📌 Singly, Doubly, and Circular Linked Lists
📌 Linked List Operations (Insert, Delete, Reverse)
📂 Stacks
📌 Applications of Stacks (Expression Evaluation, Backtracking)
📂 Queues
📌 Circular Queue, Priority Queue
📌 Deque (Double-ended Queue)
🌐 Advanced Data Structures
📂 Trees
🌳 Binary Trees
🌳 Binary Search Trees
🌳 AVL Trees (Self-Balancing)
🌳 B-Trees (Database Applications)
📂 Graphs
🔍 Graph Representation (Adjacency List, Adjacency Matrix)
🔍 Depth-First Search, Breadth-First Search
🔍 Shortest Path Algorithms (Dijkstra's, Bellman-Ford)
🔍 Minimum Spanning Tree (Prim’s, Kruskal’s)
📂 Heaps
🔺 Min and Max Heap
🔺 Heap Sort
📂 Hash Tables
📂 Disjoint Set Union (Union-Find, Path Compression)
📂 Trie (Efficient Prefix-based Search)
📂 Segment Tree (Range Queries, Lazy Propagation)
📂 Fenwick Tree (Binary Indexed Tree)
🌐 Algorithmic Paradigms
📌 Brute Force
📌 Divide and Conquer (Merge Sort, Quick Sort)
📌 Greedy Algorithms (Optimal Substructure, Real-world Applications)
📌 Dynamic Programming (Overlapping Subproblems)
📌 Backtracking (Recursive Problem Solving, Constraint Satisfaction)
📌 Sliding Window Technique
📌 Two Pointer Technique
📌 Divide and Conquer Optimization (Efficient Range Updates, Segment Trees)
🌐 Searching Algorithms
📌 Linear Search (Basic Search Technique)
📌 Binary Search (Efficient Search on Sorted Data)
📌 Depth-First Search (Graph Traversal)
📌 Breadth-First Search (Graph Traversal)
🌐 Sorting Algorithms
📌 Bubble Sort, Selection Sort, Insertion Sort
📌 Merge Sort, Quick Sort
📌 Heap Sort
🌐 Graph Algorithms
📌 Depth-First Search, Breadth-First Search
📌 Topological Sort (DAG Applications)
📌 Strongly Connected Components (Kosaraju’s, Tarjan’s)
📌 Articulation Points and Bridges
🌐 Dynamic Programming (DP)
📌 Introduction to DP Concepts
📌 Fibonacci Series using DP (Base Case, Recursion, Memoization)
📌 Longest Common Subsequence, Longest Increasing Subsequence
📌 Knapsack Problem (0/1, Fractional, Unbounded)
📌 Matrix Chain Multiplication (Dynamic Partitioning)
📌 Dynamic Programming on Trees
🌐 Mathematical and Bit Manipulation Algorithms
📌 Prime Numbers and Sieve of Eratosthenes
📌 Greatest Common Divisor, Least Common Multiple
📌 Modular Arithmetic, Modular Exponentiation
📌 Bit Manipulation Tricks (Efficient Bitwise Operations)
🌐 Advanced Topics
📌 Trie-based Algorithms
🔍 Auto-completion, Spell Checker
📌 Suffix Trees and Arrays (Efficient String Matching)
📌 Computational Geometry (Convex Hull, Line Intersection)
📌 Number Theory (Modular Arithmetic, Primality Tests)
📌 String Algorithms (Efficient String Matching and Processing)
🌐 Online Platforms
📌 LeetCode (Practice for Coding Interviews)
📌 HackerRank (Competitive Programming Challenges)
این Roadmap شامل مفاهیم اساسی، مسائل رایج و منابع تمرینی است و برای پیگیری هر بخش و پیشرفت در یادگیری کمک میکند! 🌟
#الگوریتم
📣👨💻 @AlgorithmDesign_DataStructuer
مدلهای زبانی جدید مثل Claude از Anthropic، GPT از OpenAI، Llama و دیگر مدلها، از معماریهای Decoder-only به جای Encoder-Decoder استفاده میکنند. این معماری Decoder-only یا Auto-regressive در سال ۲۰۱۸ با عرضه مدلهای GPT توسط OpenAI محبوب شد. بعدتر، سری Claude هم با همین معماری ساخته شد.
🤔 چرا معماری فقط رمزگشا (Decoder-only) محبوب شده است؟
در معماری Decoder-only، مدل به شکل Unsupervised و بر روی دادههای متنی بدون برچسب آموزش داده میشود که بهراحتی قابل دسترسی است. در این حالت، مدل برای پیشبینی توکن بعدی آموزش میبیند که دادههای آموزشی را به آسانی در دسترس قرار میدهد.
📌 تفاوت اصلی؟
نحوه ترکیب اطلاعات Input Source در رمزگشا.
- Decoder-only از Unidirectional Cross Attention استفاده میکند که همزمان به هر دو ماتریس منبع و هدف توجه میکند.
- به دلیل توجه به تمام ویژگیها در یک Attention، ماتریس خروجی لایه توجه به ماتریس منبع کمتر حساس میشود؛ بهخصوص وقتی که مدل کلمات زیادی تولید کرده و جمله نسبتاً طولانی شده باشد.
این مشکل به نام Attention Degeneration شناخته میشود، که البته قابل حل است.
💡 مزایای مدلهای فقط رمزگشا (Language Model یا LM) نسبت به رمزگذار-رمزگشا
1️⃣ از تکنیک Parameter Sharing استفاده میکند که باعث میشود پارامترها برای شبکههایی که هر دو دنباله منبع و هدف را مدیریت میکنند، مشترک باشد. این کار اندازه مدل را کاهش داده و عملکرد را بهبود میبخشد.
2️⃣ مدل Decoder-only شامل مکانیزم Layer-wise Coordination است که به رمزگشا امکان میدهد به خروجی لایههای متناظر رمزگذار دسترسی داشته باشد، و به این شکل، به اطلاعات در سطوح مختلف منبع دسترسی پیدا کند.
3️⃣ ماتریس توجه برای Decoder-only یک ماتریس Full Rank است چرا که به شکل Triangular است. این ویژگی آن را از ماتریس توجه Encoder-Decoder برتر میسازد.
❓ آیا معماری Encoder-Decoder کاملاً منسوخ شده است؟ خیر!
مدل Encoder-Decoder در Machine Translation یا ترجمه ماشینی بهتر عمل میکند. این زمانی است که Input و Output از اساس متفاوت باشند یا هدف خروجی بهطور قابل توجهی کوتاهتر از ورودی باشد. در چنین حالتی دو پشته مجزا مورد نیاز است. به عنوان مثال در ترجمه از انگلیسی به زبانهای دیگر، معماری Encoder-Decoder بهتر کار میکند.
همچنین، مدلهای فقط رمزگشا محدودیتهایی در Transfer Learning دارند.
🔍 جمعبندی:
اکثر Language Models جدید به سمت Generalization گرایش دارند. در نتیجه، مدلهای فقط رمزگشا برای این هدف بهتر کار میکنند و نسبت به معماری سنتی Encoder-Decoder آسانتر آموزش داده میشوند.
📄 برای اطلاعات بیشتر و مقایسه تجربی میان ED و LM (Decoder-only) به مقاله زیر مراجعه کنید:
https://arxiv.org/pdf/2304.04052
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer
🤔 چرا معماری فقط رمزگشا (Decoder-only) محبوب شده است؟
در معماری Decoder-only، مدل به شکل Unsupervised و بر روی دادههای متنی بدون برچسب آموزش داده میشود که بهراحتی قابل دسترسی است. در این حالت، مدل برای پیشبینی توکن بعدی آموزش میبیند که دادههای آموزشی را به آسانی در دسترس قرار میدهد.
📌 تفاوت اصلی؟
نحوه ترکیب اطلاعات Input Source در رمزگشا.
- Decoder-only از Unidirectional Cross Attention استفاده میکند که همزمان به هر دو ماتریس منبع و هدف توجه میکند.
- به دلیل توجه به تمام ویژگیها در یک Attention، ماتریس خروجی لایه توجه به ماتریس منبع کمتر حساس میشود؛ بهخصوص وقتی که مدل کلمات زیادی تولید کرده و جمله نسبتاً طولانی شده باشد.
این مشکل به نام Attention Degeneration شناخته میشود، که البته قابل حل است.
💡 مزایای مدلهای فقط رمزگشا (Language Model یا LM) نسبت به رمزگذار-رمزگشا
1️⃣ از تکنیک Parameter Sharing استفاده میکند که باعث میشود پارامترها برای شبکههایی که هر دو دنباله منبع و هدف را مدیریت میکنند، مشترک باشد. این کار اندازه مدل را کاهش داده و عملکرد را بهبود میبخشد.
2️⃣ مدل Decoder-only شامل مکانیزم Layer-wise Coordination است که به رمزگشا امکان میدهد به خروجی لایههای متناظر رمزگذار دسترسی داشته باشد، و به این شکل، به اطلاعات در سطوح مختلف منبع دسترسی پیدا کند.
3️⃣ ماتریس توجه برای Decoder-only یک ماتریس Full Rank است چرا که به شکل Triangular است. این ویژگی آن را از ماتریس توجه Encoder-Decoder برتر میسازد.
❓ آیا معماری Encoder-Decoder کاملاً منسوخ شده است؟ خیر!
مدل Encoder-Decoder در Machine Translation یا ترجمه ماشینی بهتر عمل میکند. این زمانی است که Input و Output از اساس متفاوت باشند یا هدف خروجی بهطور قابل توجهی کوتاهتر از ورودی باشد. در چنین حالتی دو پشته مجزا مورد نیاز است. به عنوان مثال در ترجمه از انگلیسی به زبانهای دیگر، معماری Encoder-Decoder بهتر کار میکند.
همچنین، مدلهای فقط رمزگشا محدودیتهایی در Transfer Learning دارند.
🔍 جمعبندی:
اکثر Language Models جدید به سمت Generalization گرایش دارند. در نتیجه، مدلهای فقط رمزگشا برای این هدف بهتر کار میکنند و نسبت به معماری سنتی Encoder-Decoder آسانتر آموزش داده میشوند.
📄 برای اطلاعات بیشتر و مقایسه تجربی میان ED و LM (Decoder-only) به مقاله زیر مراجعه کنید:
https://arxiv.org/pdf/2304.04052
#هوش_مصنوعی
📣👨💻 @AlgorithmDesign_DataStructuer