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

👨‍💻Admin👉 @Se_mohamad
Download Telegram
سلام دوستان عزیز 🌟
اگر در انجام تمرینات یا پروژه‌های خود نیاز به کمک دارید، ما آماده‌ایم تا با مناسب‌ترین قیمت در کنارتان باشیم. هر زمان که نیاز به راهنمایی یا انجام پروژه‌هایتان داشتید، روی ما حساب کنید! 👨‍💻💡

🆔 : @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
🔰 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
مدل‌های زبانی جدید مثل 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
"یک نمایش مشترک با استفاده از ویژگی‌های Continuous و Discrete برای پیش‌بینی ریسک Cardiovascular Diseases روی اسکن‌های Chest CT"

Github: https://github.com/yhygao/cbim-medical-image-segmentation

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

Supported models: https://arxiv.org/abs/2203.00131

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
ساختمان داده - مقسمی.pdf
22.8 MB
📚 کتاب ساختمان داده - مقسمی📚
اگر به‌تازگی مطالعه‌ی ساختمان داده را آغاز کرده‌اید و می‌خواهید سطح دانش خود را بسنجید، این کتاب را به شما پیشنهاد می‌کنم. این کتاب شامل سوالاتی است که اگر به‌صورت متوسط مطالب را مرور کرده باشید، می‌توانید به آن‌ها پاسخ دهید. برای افرادی که تازه به دنیای ساختمان داده وارد شده‌اند، این کتاب انتخابی عالی و کاربردی است.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
پروژه تحلیل قیمت املاک تهران 🏡📊

🔍 در این پروژه، تحلیل داده‌های قیمت املاک تهران از سایت دیوار را انجام شده. هدف اصلی، شناسایی الگوها و عوامل مؤثر بر قیمت مسکن و پیش‌بینی قیمت‌ها با مدل‌های یادگیری ماشین بود.

🌟 مراحل کلیدی پروژه:
1. پیش‌پردازش داده‌ها: شناسایی و مدیریت داده‌های پرت، پاک‌سازی و استخراج ویژگی‌های کلیدی.
2. تحلیل اکتشافی داده‌ها: بررسی الگوهای قیمتی در محله‌های مختلف تهران و تحلیل ویژگی‌هایی مانند متراژ، سال ساخت و امکانات.
3. بصری‌سازی و ارائه نتایج: ایجاد نقشه‌های تعاملی برای نمایش توزیع آگهی‌ها و تحلیل روندهای قیمتی در مناطق مختلف تهران.
4. مدل‌سازی و پیش‌بینی قیمت: استفاده از الگوریتم Random Forest Regressor برای پیش‌بینی قیمت‌ها.

📊 ابزارها و کتابخانه‌های استفاده‌شده:
Python 🐍 | Pandas | Seaborn | Matplotlib | Folium | Scikit-learn | Geopy

💭 نکته مهمی که در این پروژه یاد گرفتم: مدیریت دقیق داده‌های پرت و اهمیت آن در افزایش دقت مدل‌های پیش‌بینی.

لینک دیتاست پروژه در سایت Kaggle موجود است.
https://www.kaggle.com/datasets/raoofiali/divar-house-adv-dataset

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
This media is not supported in your browser
VIEW IN TELEGRAM
❇️ 3D Reconstruction with Spatial Memory


🔗 Discover More:
* Source Code: GitHub
* Project Page: Spann3R
* Supplement Video: Try it here
* Paper: Read the paper

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
✳️ معرفی الگوریتم‌های جستجو: DFS و BFS ✳️

🔹 DFS (Depth-First Search) - جستجوی عمق‌اول:

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

- پیچیدگی زمانی: در گراف‌های با ( n ) رأس و ( m ) یال، O(n + m)
- پیچیدگی فضایی: در حالت بدترین، O(n)
- کاربردها: حل پازل‌ها، یافتن مسیرها در گراف‌ها، و شناسایی اجزای متصل.



🔹 BFS (Breadth-First Search) - جستجوی عرض‌اول:

الگوریتم جستجوی عرض‌اول از یک رأس شروع کرده و تمامی همسایگان را در هر سطح پیمایش می‌کند و سپس به سطح بعدی می‌رود. این الگوریتم با استفاده از صف پیاده‌سازی شده و برای یافتن کوتاه‌ترین مسیر در گراف‌های بدون وزن کاربرد دارد.

- پیچیدگی زمانی: در گراف‌های با ( n ) رأس و ( m ) یال، O(n + m)
- پیچیدگی فضایی: در حالت بدترین، O(n)
- کاربردها: یافتن کوتاه‌ترین مسیر، شبکه‌های اجتماعی و موتورهای جستجو.



📊 مقایسه کلی: DFS برای جستجوی عمیق در گراف و حل مسائل پازلی مفید است، در حالی که BFS برای پیدا کردن کوتاه‌ترین مسیرها به‌ویژه در گراف‌های بدون وزن به کار می‌رود.

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

Paper : https://arxiv.org/abs/2211.14730

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
پیچیدگی‌های زمانی ساختارهای داده:
جدول تهیه شده خلاصه‌ای از هر سه نوع پیچیدگی زمانی را برای ساختارهای داده، الگوریتم‌های جستجو و مرتب‌سازی می باشد.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
1000008576.PDF
5.3 MB
📘 جزوه هوش مصنوعی استاد زارچی
نیمسال 99 | دانشگاه صنعتی شریف

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

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
Media is too big
VIEW IN TELEGRAM
این ویدیو الگوریتم‌های مختلف مرتب‌سازی را به تصویر می‌کشد و به نمایش می‌گذارد که چگونه هر کدام از آن‌ها عملیات مرتب‌سازی را انجام می‌دهند. 🌟📊

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
Media is too big
VIEW IN TELEGRAM
حتماً برای شما هم این سوال پیش آمده که مدل‌های بزرگ زبانی (LLM) چگونه اطلاعات را ذخیره می‌کنند. مثلاً یک مدل مانند ChatGPT چطور می‌تواند حجم زیادی از اطلاعات را از کل اینترنت جمع‌آوری و یاد بگیرد؟ این داده‌ها در کجای شبکه‌های عصبی ذخیره می‌شوند؟

پیشنهاد می‌کنم ویدئوی از 3blue1brown را ببینید! 📹

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
📌 RAG Showdown: Vector vs. Graph - Shaping the Future of AI Applications! 🔥
پیاده‌سازی RAG (ترکیب بازیابی و تولید) با دو روش متفاوت امکان‌پذیر است: یکی با استفاده از دیتابیس برداری و دیگری با استفاده از گراف دانش. هر دو روش با هدف بازیابی داده‌های مرتبط و تولید پاسخ دقیق به کاربر استفاده می‌شوند، اما هر کدام ویژگی‌های خاص خود را دارند:

💠 RAG با دیتابیس برداری:
در این روش، پرسش به بردار تبدیل شده و جستجو بر اساس شباهت معنایی بین بردارها صورت می‌گیرد. این روش برای داده‌های غیرساختاریافته و بزرگ کارایی بالایی دارد و به ارتباطات مستقیمی بین داده‌ها نیاز ندارد.

🔗 RAG با گراف دانش:
اینجا از روابط و ساختار داده‌ها استفاده می‌شود. جستجو در گراف انجام شده و نهادها و ارتباطات مرتبط استخراج می‌شوند. این روش برای حوزه‌هایی که نیاز به فهم عمیق روابط دارند، بسیار مفید است.

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

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