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

👨‍💻Admin👉 @Se_mohamad
Download Telegram
DSA interview question .pdf
1.2 MB
اگر شما به دنبال دستیابی به رتبه‌های برتر در آزمون‌های DSA (Data Structures and Algorithms) یا مصاحبه‌های کاری در شرکت‌های برتر هستید، باید با مجموعه‌ای از سوالات پیچیده و چالش‌برانگیز آشنا باشید. این سوالات معمولاً روی مفاهیم پایه و عمیق از ساختارهای داده و الگوریتم‌ها تمرکز دارند و شما را ملزم می‌کنند که نه تنها راه‌حل‌های بهینه ارائه دهید، بلکه آنها را در کوتاه‌ترین زمان ممکن پیاده‌سازی کنید. در این پست، ما چند نمونه از سوالات DSA را که در مصاحبه‌های شرکت‌های برتر دنیا (Google، Facebook، Amazon و غیره) مطرح شده‌اند، با شما به اشتراک می‌گذاریم.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
هیجان‌زده‌ام که این دستاورد جدید در بهینه‌سازی یادگیری ماشین رو از تیم اپل با شما به اشتراک بذارم!
معرفی AdEMAMix: یک بهینه‌ساز فوق‌پیشرفته که مفهوم مومنتوم (شتاب) در Stochastic Gradient Descent رو متحول کرده. این تکنیک تازه، از دو میانگین متحرک نمایی بهره می‌بره تا با ترکیب هوشمندانه‌ای از گرادیان‌های اخیر و داده‌های اولیه، سرعت یادگیری مدل‌های پیچیده رو افزایش بده و در عین حال پایداری و عمومی‌سازی اون‌ها رو به شدت بهبود ببخشه.

نتیجه؟ بهبود عملکرد و کاهش قابل‌توجه فراموشی مدل در طول آموزش، که باعث می‌شه شبکه‌های عصبی بهتر از هر زمان دیگه‌ای وظایف متنوع رو انجام بدن.

جزییات بیشتر در لینک زیر می باشد، حتماً چک کنید! 👇

https://arxiv.org/abs//2409.03137

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
برنامه 100 روزه یادگیری DSA 🎯

روزهای 1 تا 10: پایه‌گذاری مفاهیم 📚
- پیچیدگی زمان و فضا: یادگیری نمادهای Big-O 💾
- آشنایی و پیاده‌سازی آرایه‌ها، لیست‌های پیوندی، پشته، صف و رشته‌ها 🔗📦

روزهای 11 تا 25: الگوریتم‌های پایه 🧩
- جستجو: جستجوی خطی و دودویی 🔍
- مرتب‌سازی: حبابی، ادغامی، سریع 🌀🔄
- الگوریتم‌های رشته‌ای و اعداد اول 📜🔢

روزهای 26 تا 40: درخت‌ها و گراف‌ها 🌳🗺
- آشنایی با درخت‌ها (BST) و گراف‌ها 🌐
- پیمایش درخت: DFS و BFS 🔄🔀
- پیچیدگی عملیات روی این ساختارها 🧮

روزهای 41 تا 60: الگوریتم‌های پیشرفته 🚀
- الگوریتم‌های گراف: دایکسترا و کوتاه‌ترین مسیر
- پیمایش و جستجو در گراف 🚦
- الگوریتم‌های تقسیم و غلبه 🧩⚡️

روزهای 61 تا 80: برنامه‌نویسی پویا (Dynamic Programming) 🧠💡
- حل مسائل مشهور: فیبوناچی، کوله‌پشتی، LCS 🎒
- درک و پیاده‌سازی تکنیک‌های تفکیک و ادغام و برنامه‌ریزی پویا 🔄🧠

روزهای 81 تا 100: مرور و پروژه عملی 🛠
- مرور و بهینه‌سازی کدها ✍️💻
- حل مسائل پیچیده‌تر 🔧
- پروژه عملی 🎓🔑

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
برنامه‌نویسی پویا (Dynamic Programming یا DP) یک تکنیک در طراحی الگوریتم‌ها است که برای حل مسائل پیچیده با استفاده از حل مسائل کوچکتر و ذخیره نتایج آن‌ها استفاده می‌شود. این تکنیک به‌طور خاص زمانی مفید است که مسئله دارای زیرمسئله‌های همپوشان و ساختار بهینه‌سازی باشد. 🎯

اصول برنامه‌نویسی پویا 🧩

دو ویژگی کلیدی مسائل قابل حل با برنامه‌نویسی پویا عبارتند از:

1. زیرمسئله‌های همپوشان (Overlapping Subproblems): بسیاری از مسائل بهینه‌سازی، مانند پیدا کردن مسیر بهینه یا محاسبه تعداد راه‌های مختلف برای انجام یک کار، زیرمسئله‌های تکراری دارند. در این شرایط، یک مسئله بزرگ به تعداد زیادی زیرمسئله کوچکتر تقسیم می‌شود و هر یک از این زیرمسئله‌ها ممکن است چندین بار تکرار شوند. 🔁

2. ساختار بهینه‌سازی (Optimal Substructure): راه‌حل بهینه یک مسئله می‌تواند با ترکیب راه‌حل‌های بهینه زیرمسئله‌های آن به دست آید. به عبارت دیگر، هر راه‌حل بهینه شامل ترکیبی از راه‌حل‌های بهینه‌ی زیرمسئله‌ها است. 🛠

روش‌های پیاده‌سازی برنامه‌نویسی پویا 💻

دو روش اصلی برای پیاده‌سازی برنامه‌نویسی پویا وجود دارد:

1. بالا به پایین (Top-Down) با استفاده از تکنیک حفظ‌سازی (Memoization): در این روش، مسئله اصلی را به زیرمسئله‌های کوچکتر تقسیم کرده و هر بار نتیجه محاسبه‌شده زیرمسئله‌ها را ذخیره می‌کنیم. زمانی که یک زیرمسئله دوباره نیاز باشد، از نتیجه ذخیره‌شده استفاده می‌کنیم، در عوض اینکه دوباره آن را محاسبه کنیم. 📝

2. پایین به بالا (Bottom-Up): در این روش، از زیرمسئله‌های ساده‌تر شروع کرده و آن‌ها را به‌تدریج حل می‌کنیم تا به مسئله اصلی برسیم. این روش به استفاده از آرایه‌ها یا جدول‌ها برای ذخیره نتایج زیرمسئله‌ها نیاز دارد. این روش اغلب بهینه‌تر از روش بالا به پایین است زیرا از فراخوانی‌های مکرر جلوگیری می‌کند. 📊

کاربردهای برنامه‌نویسی پویا 🌐

برنامه‌نویسی پویا در حل مسائل مختلفی از جمله موارد زیر بسیار کاربردی است:

- مسئله‌ی کوله‌پشتی (Knapsack Problem) 🎒
- فاصله ویرایش (Edit Distance) در پردازش زبان طبیعی 📖
- تقسیم‌بندی زنجیره‌ی ماتریس‌ها (Matrix Chain Multiplication) 📐
- پیدا کردن زیررشته‌ی مشترک طولانی‌ترین (Longest Common Subsequence) 🧵
- مسئله‌ی مسیر یابی (Shortest Path Problem) مانند الگوریتم فلوید-وارشال 🛤

برنامه‌نویسی پویا به دلیل کاهش محاسبات تکراری و بهینه‌سازی زیرمسئله‌ها، یکی از مهم‌ترین ابزارها در طراحی الگوریتم‌های کارآمد است. ⚙️

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
یک پست مفید، آخرین مدل پیشرفته OpenAI به نام o1 را به این صورت خلاصه کرده است:

🔹 بهبود کیفیت: دلیل بهبود این مدل، توانایی آن در استدلال قبل از ارائه پاسخ است. در حالی که خودِ فرآیند استدلال نشان داده نمی‌شود، یک خلاصه سطح بالا از آن ارائه خواهد شد.

🔹 پیشرفت در استدلال: مدل‌های قبلی نیز می‌توانستند استدلال کنند، اما با کارایی کمتر. تمرکز OpenAI بر بهبود توانایی مدل در رسیدن به پاسخ صحیح از طریق اصلاح و استدلال مکرر بوده است.

🔹 تمرکز مدل: o1 قرار نیست جایگزین gpt-4o در همه وظایف شود. این مدل در زمینه‌های ریاضی، فیزیک و برنامه‌نویسی بهتر عمل می‌کند، دستورالعمل‌ها را دقیق‌تر دنبال می‌کند، اما ممکن است در زبان‌شناسی ضعیف‌تر باشد و دانش پایه محدودتری داشته باشد. بهتر است این مدل را به عنوان "متفکر" (مانند مفهوم "اندیشمند" در روسی) در نظر بگیرید. نسخه مینی این مدل با gpt-4o-mini قابل مقایسه است و تفاوت بزرگی وجود ندارد.

🔹 دسترسی به مدل: در حال حاضر، این مدل برای تمامی مشترکین پرداختی ChatGPT Plus در دسترس است، اما با محدودیت‌های سختگیرانه: 30 پیام در هفته برای مدل بزرگ و 50 پیام برای نسخه مینی. بنابراین، درخواست‌های خود را با دقت برنامه‌ریزی کنید!

🔹 دسترسی از طریق API: اگر از API به طور مکرر استفاده کرده‌اید و در گذشته بیش از 1000 دلار هزینه کرده‌اید، می‌توانید از طریق API به این مدل دسترسی داشته باشید، اما با محدودیت 20 درخواست در دقیقه.

🔹 هزینه‌ها: هزینه‌ها بالاست: نسخه کوچک‌تر o1-mini کمی گران‌تر از نسخه gpt-4o در ماه آگوست است. در واقع شما برای استدلال‌هایی که مدل انجام می‌دهد (و نمی‌بینید)، هزینه پرداخت می‌کنید که ممکن است به طور قابل توجهی بیشتر باشد. بنابراین، افزایش قیمت می‌تواند بین 3 تا 10 برابر باشد، بسته به میزان زمانی که مدل برای "تفکر" صرف می‌کند.

🔹 توانایی‌ها: این مدل مسائل ریاضی و برنامه‌نویسی در سطح المپیاد را با مهارت برنده‌های بین‌المللی حل می‌کند و برای مسائل پیچیده فیزیکی که به سادگی با جستجوی گوگل قابل حل نیستند، در سطح یک دانشجوی دکتری (~75-80% صحیح) عمل می‌کند.

🔹 ویژگی‌ها: در حال حاضر، مدل نمی‌تواند از تصاویر استفاده کند، در اینترنت جستجو کند یا کد اجرا کند، اما این ویژگی‌ها به زودی اضافه خواهند شد.

🔹 محدودیت‌ها: زمینه (Context) مدل هنوز به 128 هزار توکن محدود است، مشابه نسخه‌های قبلی. با این حال، انتظار می‌رود این مقدار در آینده افزایش یابد، زیرا OpenAI ادعا می‌کند که مدل در حال حاضر به مدت چند دقیقه "فکر" می‌کند و هدف، افزایش این مدت زمان است.

🔹 مشکلات اولیه: مانند هر انتشار اولیه، ممکن است برخی باگ‌های ساده وجود داشته باشد که مدل به درخواست‌های واضح پاسخ ندهد یا به "راه‌های فرار" منجر شود. این موضوع طبیعی است و انتظار می‌رود این مشکلات طی 2-3 ماه کاهش یابد، زمانی که مدل از حالت پیش‌نمایش خارج شود.

🔹 نسخه غیر پیش‌نمایش: OpenAI در حال حاضر نسخه غیر پیش‌نمایش این مدل را در اختیار دارد که در حال آزمایش است و گفته می‌شود از نسخه فعلی بهتر است.

🔹 عملکرد خودکار: مدل جدید بدون نیاز به درخواست‌های خاص عمل می‌کند؛ نیازی نیست از آن بخواهید به‌طور دقیق و مرحله‌به‌مرحله پاسخ دهد، این کار به‌صورت خودکار در پس‌زمینه انجام خواهد شد.

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
الگوریتم هافمن 😎🧑‍💻
یکی از روش‌های فوق‌العاده برای فشرده‌سازی داده‌هاست 📦💾. توسط دیوید هافمن در سال ۱۹۵۲ ابداع شد و هدف اصلی‌اش کم کردن تعداد بیت‌ها برای ذخیره یا انتقال داده‌هاست 💡⬇️.

مراحل کار چیه؟ 🛠
1. محاسبه فراوانی‌ها 📊: تعداد دفعات تکرار هر کاراکتر در متن ورودی رو حساب می‌کنیم. این همون چیزیه که الگوریتم بر اساسش کار می‌کنه 🔍.

2. ساخت درخت هافمن 🌳: الگوریتم، یک درخت با استفاده از فراوانی کاراکترها ایجاد می‌کنه. چجوری؟
- هر کاراکتر می‌شه یک "گره برگ" 🍃.
- گره‌هایی که کمترین فراوانی دارن، با هم ترکیب می‌شن و به یک گره والد جدید متصل می‌شن 🤝.
- این کار رو ادامه می‌دیم تا درخت کامل بشه 🪜.

3. تخصیص کدهای باینری 💻: هر کاراکتر بر اساس مسیر خودش در درخت، یک کد باینری می‌گیره. هر بار به چپ برویم = 0 🕶⬅️ و هر بار به راست برویم = 1 🕶➡️.

4. کدگذاری داده‌ها 📥: حالا که برای هر کاراکتر کد مشخص شده، داده‌ها رو با اون کدها فشرده می‌کنیم.

مثال ساده 📝
فرض کن کلمه "BCAABB" رو داریم:
- فراوانی‌ها: 'A': 2 بار، 'B': 3 بار، 'C': 1 بار.
- درخت هافمن: گره‌ها رو ترکیب می‌کنیم تا درخت درست بشه.
- کدگذاری: مثلاً می‌شه 'A': 01، 'B': 1، 'C': 00.
- خروجی: "BCAABB" تبدیل می‌شه به "100011011" 🔢.

مزایا و کاربردها 🎯
- کارایی بالا 🚀: برای داده‌هایی که تکراری هستن، بسیار کارآمده.
- بدون اتلاف 💯: کدگذاری هافمن بدون از دست دادن اطلاعات انجام می‌شه.
- کاربردها: از فایل‌های متنی تا صوتی 🎵 و تصویری 📸، همه جا به کار میاد.

محدودیت‌ها ⚠️
- اگر کاراکترها توزیع یکسانی داشته باشن، هافمن بهترین روش نیست 🤔.
- ساخت درخت برای داده‌های خیلی بزرگ ممکنه زمان‌بر باشه 🕰.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
توسعه سریع مدل‌های هوش مصنوعی باعث افزایش تقاضا برای منابع محاسباتی شده است. درخواست‌های پردازش هر شش ماه دو برابر می‌شوند! 🧠💻 این تغییر توجه دوباره‌ای به شرکت‌های تولیدکننده ریزپردازنده‌ها جلب کرده که قبلاً تحت‌الشعاع غول‌های نرم‌افزاری بودند. 🏢🌐

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

برای پیشرفت سریع، تولیدکنندگان تراشه باید به دنبال ایده‌های جدید باشند. برخی از این ایده‌ها مثل هماهنگی بیشتر سخت‌افزار و نرم‌افزار بهبودهای جزئی هستند، اما برخی دیگر نیاز به تغییرات اساسی در طراحی دارند. 💡🔧

این تغییرات ممکن است شامل استفاده از مواد جدید در تراشه‌های سیلیکونی یا حتی کنار گذاشتن روش‌های معمول پردازش دیجیتال باشند. 🌱🚀 با رشد تقاضا برای هوش مصنوعی، صنعت باید برای همگام شدن با تکنولوژی، نوآوری کند. 🌐

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
Merge sort :
در حالت عادی مرج سورت، آرایه به صورت مکرر به دو نیمه تقسیم می‌شود. این تقسیمات منجر به تعداد سطح‌های بازگشتی به اندازه‌ی(log_2(n) ) می‌شوند که در هر سطح، ادغام نیمه‌ها در زمان ( O(n)) انجام می‌گیرد. بنابراین، پیچیدگی زمانی مرج سورت معمولی برابر با ( O(n log n)) است.

اما اگر تقسیم آرایه به صورت "مورب" انجام شود و باعث ایجاد بخش‌های نامتقارن شود، مثلاً در هر تقسیم یک بخش بزرگ و یک بخش کوچک داشته باشیم، شرایط پیچیده‌تر خواهد شد. فرض کنیم در هر تقسیم، آرایه به دو قسمت \( n-1 \) و 1 تقسیم شود. در این حالت:

1. تعداد تقسیم‌ها: از آنجا که در هر مرحله تنها یک عنصر از مسئله حذف می‌شود، به ( n ) سطح برای تجزیه کل آرایه نیاز است. 🤯
2. ادغام: در هر یک از این ( n) سطح، ادغام زیردنباله‌ها به زمان( O(n)) نیاز دارد.

در نتیجه، ترکیب این دو عامل منجر به پیچیدگی زمانی زیر می‌شود:
[ O(n^2) ]

خلاصه 📝
وقتی مرج سورت آرایه را به صورت نامتقارن (مورب) تقسیم می‌کند، پیچیدگی زمانی آن از ( O(n log n) ) به( O(n^2) ) افت پیدا می‌کند که نشان‌دهنده‌ی ناکارآمدی این روش تقسیم است.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
🎓 اگر به دنبال یادگیری هوش مصنوعی و استفاده از ابزارهای پیشرفته هستید، SharifGPT بهترین انتخاب شماست!

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

به کانال ما بپیوندید و از دوره‌ها و کارگاه‌های آموزشی بهره‌مند شوید. راه موفقیت و پیشرفت با SharifGPT هموارتر است! 🌟

آدرس کانال: https://t.me/+QAsJfLpbaHJiMzQ0 🚀

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
📚 ثبت‌نام دوره‌ی رایگان یادگیری ماشین - پاییز ۱۴۰۳ 📚

برای حضور مجازی در کلاس‌های درس یادگیری ماشین دانشکده‌ی مهندسی کامپیوتر دانشگاه صنعتی شریف در پاییز ۱۴۰۳، می‌توانید از طریق فرم زیر ثبت‌نام کنید.

این دوره با همکاری یک تیم ۷۰ نفره از دانشجویان و دانش‌آموختگان دانشگاه شریف و سایر دانشگاه‌ها و با تدریس علی شریفی زارچی ارائه می‌شود. کلاس‌ها هر هفته در روزهای یکشنبه و سه‌شنبه از ساعت ۹ تا ۱۰:۳۰ برگزار خواهد شد و از اول مهر تا ۱۱ دی ۱۴۰۳ ادامه دارد.

شرکت در این دوره رایگان و برای همه‌ی دانشجویان علاقه‌مند آزاد است. لازم به ذکر است که این دوره مدرک دانشگاهی ندارد.

⚠️ برای شرکت در این دوره، آشنایی با مفاهیم زیر ضروری است:
- برنامه‌نویسی پایتون 🐍
- آمار و احتمال 📊
- ریاضی عمومی دانشگاهی 📐
- الگوریتم و جبر خطی 🧮

📌 فرصت را از دست ندهید! همین حالا ثبت‌نام کنید و از آموزش‌های تخصصی و حرفه‌ای بهره‌مند شوید.

📎https://www.sharifml.ir/

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
هوش مصنوعی وقوع جرم را قبل از رخ دادن پیش‌بینی می‌کند! 🤯

🔹 در واقع Dejaview رفتار انسانی، داده‌های مکانی و سوابق وقایع گذشته را بررسی می‌کند و با نرخ دقت ۸۲.۸٪ وقوع جرم را پیش‌بینی می‌کند.

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

🔹 توسعه‌دهندگان قصد دارند آن را تا سال ۲۰۲۵ به عموم مردم عرضه کنند.

This AI claims to predict crimes before they happen based on real-time CCTV analysis

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
جزوه کامل ساختمان داده.rar
19.3 MB
📚درس: ساختمان داده‌ها
👨‍🏫مدرس: الهه دری
🏛دانشگاه: آزاد اسلامی

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
با شروع ترم جدید، قصد دارم برای دوستانی که این ترم درس‌های "طراحی الگوریتم" و "ساختمان داده" را دارند، یک آموزش کامل و جامع ارائه کنم. از تعاریف ابتدایی این دروس شروع می‌کنیم و هر هفته، مطابق با پیشروی اساتید محترم، فصل‌ها را بررسی خواهیم کرد. این آموزش شامل توضیحات مفهومی و حل برخی از سوالات نیز خواهد بود. اگر در طول مسیر سوال یا مشکلی داشتید، می‌توانید از طریق ادمین کانال سوالات خود را مطرح کنید؛ حتماً راهنمایی‌های لازم را دریافت خواهید کرد.

با تشکر از همکاری و همراهی شما 🙏
ساختمان داده‌ها (Data Structure) 🏗 یکی از پایه‌های اساسی در علم کامپیوتر است که به سازماندهی و ساختاردهی داده‌ها کمک می‌کند تا بتوان به سرعت و بهینه به آن‌ها دسترسی پیدا کرد. این ساختارها شامل آرایه‌ها 📊، لیست‌های پیوندی 🔗، درخت‌ها 🌳، گراف‌ها 🌐 و بسیاری از ساختارهای دیگر می‌شود که هر یک برای کاربردهای خاص خود مناسب هستند. به‌طور مثال، برای جستجوی سریع در داده‌ها، می‌توان از ساختارهایی مانند درخت جستجوی دودویی (Binary Search Tree) 🧐 استفاده کرد.

از سوی دیگر، طراحی الگوریتم (Algorithm Design) 💻 فرآیندی است که در آن الگوریتم‌هایی برای حل مسائل ایجاد می‌شوند. الگوریتم‌ها دستورالعمل‌های گام‌به‌گام هستند که به کامپیوتر می‌گویند چگونه یک مسئله را حل کند. یک الگوریتم بهینه باید بتواند با حداقل استفاده از منابع و زمان ، به بهترین نتیجه برسد. برای مثال، الگوریتم مرتب‌سازی سریع (QuickSort) ⚡️ یکی از الگوریتم‌های کارآمد برای مرتب‌سازی داده‌ها است.

👨‍💻 ساختمان داده‌ها و الگوریتم‌ها در کنار هم مثل ابزارهای یک مهندس هستند که برای حل مسائل پیچیده و ساخت نرم‌افزارهای کارآمد به کار می‌روند. مهندس نرم‌افزار باید بداند که از کدام ساختمان داده برای کدام مسئله استفاده کند تا الگوریتم‌های بهتری طراحی کند.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
Please open Telegram to view this post
VIEW IN TELEGRAM
در ساختمان داده و تحلیل الگوریتم‌ها، رشد توابع (Growth of Functions) به بررسی نحوه افزایش زمان اجرای یک الگوریتم یا مقدار حافظه مورد نیاز آن نسبت به اندازه ورودی (معمولاً (n)می‌پردازد 📊. این تحلیل برای پیش‌بینی کارایی الگوریتم‌ها و انتخاب بهترین الگوریتم برای یک مسئله بسیار مهم است. در ادامه انواع توابع رشد و نحوه مقایسه آنها را توضیح می‌دهم:

1. توابع ثابت (Constant Function) – (O(1
- این نوع توابع نشان می‌دهند که زمان اجرای الگوریتم با تغییر اندازه ورودی تغییر نمی‌کند و همیشه ثابت است . به عنوان مثال:
- دسترسی مستقیم به یک عنصر در آرایه (مثل (array[i]) زمان ثابت دارد.

2. توابع لگاریتمی (Logarithmic Functions) – (O(log n
- در اینجا زمان اجرا با افزایش ورودی به صورت لگاریتمی افزایش می‌یابد 📈. یعنی رشد زمان اجرا بسیار کند است. به عنوان مثال، الگوریتم‌هایی که داده‌ها را به صورت مکرر به نصف تقسیم می‌کنند، مانند:
- جستجوی دودویی (Binary Search) 🔍: در هر مرحله اندازه فضای جستجو نصف می‌شود، بنابراین پیچیدگی زمانی آن O(log n) است.

3. توابع خطی (Linear Functions) – \O(n)
- در این حالت، زمان اجرا به طور مستقیم و با نسبت 1:1 با اندازه ورودی افزایش می‌یابد 📐. به عنوان مثال:
- پیمایش یا جستجو در یک لیست از اندازه(n) به زمان خطی (O(n نیاز دارد.

4. توابع خطی لگاریتمی (Linearithmic Functions) – (O(n log n
- این نوع تابع‌ها سریع‌تر از توابع خطی رشد می‌کنند ولی از توابع درجه دوم (چندجمله‌ای) کندتر هستند 🌀. الگوریتم‌های کارآمد مرتب‌سازی مانند:
- مرتب‌سازی سریع (Quick Sort) و مرتب‌سازی ادغامی (Merge Sort) معمولاً پیچیدگی زمانی (O(n log n دارند.

5. توابع چندجمله‌ای (Polynomial Functions)
- در این توابع، زمان اجرا به صورت درجه \(k\) از \(n\) افزایش می‌یابد 📊:
-پیچدگی O(n^2): مانند مرتب‌سازی حبابی (Bubble Sort) 🫧 و مرتب‌سازی انتخابی (Selection Sort) که زمان اجرای آنها درجه دوم است.
-پیچدگی O(n^3): در برخی از الگوریتم‌های پیچیده‌تر ممکن است مشاهده شود.

6. توابع نمایی (Exponential Functions) – (O(2^n
- در این حالت، زمان اجرا با نرخ بسیار سریعی افزایش می‌یابد 🚀، به گونه‌ای که هر واحد افزایش در اندازه ورودی باعث دو برابر شدن زمان اجرا می‌شود. به عنوان مثال:
- الگوریتم‌های بررسی تمامی حالات (Brute Force) برای حل مسائلی مانند مسئله کوله‌پشتی (Knapsack Problem) 🎒 یا مجموعه‌های مستقل (Independent Set Problem) معمولاً زمان نمایی دارند.

7. توابع فاکتوریل (Factorial Functions) –(O(n!
- این تابع‌ها بسیار سریع‌تر از توابع نمایی رشد می‌کنند و معمولاً برای مسائل بسیار پیچیده استفاده می‌شوند 💥. به عنوان مثال:
- مسئله مرتب‌سازی تمامی جایگشت‌ها (Permutations) زمان O(n!)) دارد، زیرا همه جایگشت‌های ممکن بررسی می‌شوند.

8. مقایسه رشد توابع
برای فهم بهتر رشد توابع، می‌توان آنها را از نظر نرخ رشد مقایسه کرد:


O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n) < O(n!)


در عمل، وقتی (n) (اندازه ورودی) بزرگ می‌شود، توابعی مانند O(2^n) و O(n!) رشد بسیار سریعی دارند و اغلب غیرعملی هستند 🚫. از سوی دیگر، توابعی مانند O(log n)و O(n)کارایی بسیار بالایی دارند .

9. معنی عملی رشد توابع
- الگوریتم‌هایی با پیچیدگی زمانی پایین‌تر (مانند O(n)یا (O(log n برای مسائل با ورودی‌های بزرگ بسیار مناسب‌تر هستند 🏃‍♂️.
- الگوریتم‌های با پیچیدگی بالاتر (مانند (O(n^2 یا O(2^n)معمولاً برای مسائل کوچک یا در شرایط خاص به کار می‌روند 🛑.

در کل، فهم رشد توابع به ما کمک می‌کند تا الگوریتم‌های مختلف را از نظر کارایی مقایسه کنیم و مناسب‌ترین گزینه را برای حل مسائل مختلف انتخاب کنیم 🎯.

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
خانوم Khuyen Tran در صفحه توییترشون یه لایبرری جالب معرفی کردن که از طریق اون می تونید عملیات Pandas رو به راحتی و تنها با یک خط به صورت پارارل در همه پردازنده های موجود در سیستم اجرا کنید.

کتابخانه پاندارارل در گیت هاب

#هوش_مصنوعی
📣👨‍💻 @AlgorithmDesign_DataStructuer
Algorithms analysis_complexity.pdf
184.6 KB
تحلیل و محاسبه پیچیدگی زمانی چند الگوریتم معروف با استفاده از روش‌های مختلف

#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer
🚀 FlowTurbo:
به سوی تولید تصویر بلادرنگ مبتنی بر جریان با استفاده از پالایشگر سرعت
(NeurIPS 2024)

این عنوان به یک روش جدید برای تولید تصاویر در زمان واقعی اشاره دارد که بر اساس جریان‌های تصویر عمل می‌کند و از یک پالایشگر سرعت برای بهبود کیفیت استفاده می‌کند. در کنفرانس NeurIPS 2024 معرفی شده است.

git clone https://github.com/shiml20/FlowTurbo.git
cd FlowTurbo


Github: https://github.com/shiml20/flowturbo

📕 Paper: https://arxiv.org/abs/2409.18128v1

🤗 Dataset: https://paperswithcode.com/dataset/imagenet

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