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

👨‍💻Admin👉 @Se_mohamad
Download Telegram
💡 توجه ترکیبی از سرها (MoH) روشی جدید برای بهبود کارایی توجه چندسر در ترنسفورمرهاست. MoH هر سر توجه را مانند یک متخصص می‌بیند و به هر توکن اجازه می‌دهد مرتبط‌ترین سرها را انتخاب کند. این روش بدون افزایش پارامترها، کارایی استنتاج را بهبود می‌بخشد. MoH به جای جمع ساده، از جمع وزنی استفاده کرده و انعطاف‌پذیری بیشتری ارائه می‌دهد.

توجه ترکیبی از سرها (MoH) در مدل‌های مختلف مانند ViT، DiT و LLMs نتایج چشمگیری داشته است. مثلاً MoH-ViT-B با فعال‌سازی 75٪ از سرهای توجه به دقت 84.9٪ در ImageNet-1K رسیده است.

همچنین مدل‌هایی مثل LLaMA3-8B با تنظیم به MoH، دقت بیشتری با سرهای کمتری دارند. MoH-LLaMA3-8B با 75٪ سرها، 2.4٪ بهتر از نسخه قبلی عمل کرده است.

https://arxiv.org/abs/2410.11842

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
پیچیدگی زمانی (Time Complexity) برای عملیات‌های مختلف روی پشته (Stack)

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
الگوریتم Longest Common Subsequence (LCS) یکی از مسائل پایه‌ای در نظریه رشته‌ها و الگوریتم‌های پویا است. این الگوریتم طولانی‌ترین زیررشته‌ی مشترک بین دو رشته را پیدا می‌کند که نیازی به پیوسته بودن ندارد اما ترتیب کاراکترها باید حفظ شود.

کاربردهای اصلی:
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
ریاضیات یادگیری ماشین:

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

https://github.com/dair-ai/Mathematics-for-ML

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
استنفورد به‌تازگی سخنرانی جدیدی با عنوان «ساخت مدل‌های زبانی بزرگ (LLMs)» منتشر کرده است. تماشای این ویدئو را به همه توصیه می‌کنم.

«این سخنرانی نمای کلی و مختصری از فرآیند ساخت مدلی شبیه به ChatGPT ارائه می‌دهد که شامل پیش‌آموزش (مدل‌سازی زبان) و پس‌آموزش (تنظیم دقیق با داده‌های برچسب‌دار و تقویت یادگیری از طریق بازخورد انسانی) است.

در هر بخش، به بررسی روش‌های رایج جمع‌آوری داده‌ها، الگوریتم‌ها و روش‌های ارزیابی پرداخته می‌شود.»

https://www.youtube.com/watch?v=9vM4p9NN0Ts

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
📚 مسیر یادگیری ساختمان داده‌ها و الگوریتم‌ها 💡

آماده‌ای تا هوش و خلاقیت خودت رو به چالش بکشی؟ 🚀 با یادگیری مفاهیمی مثل لیست‌های پیوندی، پشته‌ها، صف‌ها، گراف‌ها، درخت‌ها و بسیاری از الگوریتم‌های جذاب دیگه، می‌تونی قدم به دنیای برنامه‌نویسی حرفه‌ای بذاری! 🔥

از الگوریتم‌های حریصانه تا برنامه‌نویسی پویا، همه این‌ها ابزارهایی هستن که می‌تونی با حل بیش از 450 مسئله بهشون تسلط پیدا کنی! 🌟

https://www.codechef.com/roadmap/data-structures-and-algorithms

لطفاً این محتوا را با دوستانتان به اشتراک بگذارید تا همه با هم از یادگیری لذت ببریم! 🚀🎯

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
مقدمه سریع و کاربردی گوگل به یادگیری ماشین 🚀، شامل مجموعه‌ای از درس‌های آموزنده است که همراه با ویدیوهای آموزشی 🎥، شبیه‌سازی‌های تعاملی 🌀 و تمرین‌های عملی 💻 ارائه می‌شود تا شما را به سرعت در مبانی یادگیری ماشین ماهر کند. این دوره با رویکردی عملی، به شما کمک می‌کند تا با مفاهیم کلیدی یادگیری ماشین آشنا شوید و آن‌ها را در دنیای واقعی به کار بگیرید 🌍.

https://developers.google.com/machine-learning/crash-course

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
وقتی LaTeX با شبکه عصبی ترکیب می‌شود

PlotNeuralNet
اگر می‌خواهید شبکه‌های عصبی خود را با دقت و کیفیت مقالات علمی ترسیم کنید، PlotNeuralNet یک گزینه عالی است.
این ابزار با استفاده از LaTeX به شما امکان می‌دهد تا مدل‌ها و لایه‌های شبکه عصبی را با جزئیات و به صورت کاملاً قابل تنظیم نمایش دهید.
نتیجه؟ یک تصویر واضح و دقیق که همه اجزای شبکه را به زیبایی و دقت نمایش می‌دهد.

میخای ازش استفاده کنی؟ رو لینک زیر کلیک کن 👇
https://github.com/HarisIqbal88/PlotNeuralNet

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
الگوریتم مرتب‌سازی درج (Insertion Sort) یکی از الگوریتم‌های ساده مرتب‌سازی است که شباهت زیادی به مرتب کردن کارت‌های بازی 🃏 در دست دارد. فرض کنید اولین کارت به‌طور پیش‌فرض مرتب است و سپس کارت‌های نامرتب دیگر را به ترتیب انتخاب می‌کنیم. اگر کارت انتخاب‌شده بزرگتر از کارت‌های مرتب‌شده قبلی باشد، در سمت راست آن قرار می‌گیرد و در غیر این صورت در سمت چپ 🡐🡒. این روند ادامه دارد تا همه کارت‌ها به درستی مرتب شوند.

در الگوریتم مرتب‌سازی درج نیز همین ایده به کار گرفته می‌شود. ابتدا یک عنصر انتخاب می‌شود و سپس در میان عناصر مرتب‌شده جستجو می‌شود تا جایگاه مناسب آن پیدا شود. با وجود سادگی، این روش برای مجموعه داده‌های بزرگ کارایی خوبی ندارد، زیرا پیچیدگی زمانی آن در حالت متوسط و بدترین حالت برابر با 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
سلام دوستان عزیز 🌟
اگر در انجام تمرینات یا پروژه‌های خود نیاز به کمک دارید، ما آماده‌ایم تا با مناسب‌ترین قیمت در کنارتان باشیم. هر زمان که نیاز به راهنمایی یا انجام پروژه‌هایتان داشتید، روی ما حساب کنید! 👨‍💻💡

🆔 : @se_mohamad
در اینجا توابع اصلی برای کار با ساختار داده پشته (stack) در زبان پایتون را آورده‌ام. این توابع شامل عملیات‌های اساسی مانند اضافه کردن (push)، حذف کردن (pop)، بررسی تهی بودن پشته و مشاهده عنصر بالای پشته هستند.

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
This media is not supported in your browser
VIEW IN TELEGRAM
مراحل اصلی آموزش مدل‌های زبانی بزرگ (مثل GPT-4):

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://github.com/suhassrivats/Stanford-Data-Structures-and-Algorithms

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
دسترسی به صدها کتاب و منابع ارزشمند در حوزه دیتاساینس!

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

https://witaik.com/book/programming/

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer