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

👨‍💻Admin👉 @Se_mohamad
Download Telegram
مثالی از الگوریتم MAX-HEAPIFY که ابتدا آرایه A را وارد یک درخت میکنیم سپس با استفاده جابه جایی که در درخت صورت گرفته در آخر هم آرایه مرتب شده به دست می آید.
#الگوریتم

📣👨‍💻 @AlgorithmDesign_DataStructuer
Exams_Ai_@AlgorithmDesign_DataStructuer.rar
24.8 MB
سوالات میان ترم و پایانی هوش مصنوعی دانشگاه Toronto کانادا
اگر مشکلی در حل سوالات داشتید میتونید از ادمین کانال کمک بگیرید.

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
اگر n عنصر نامرتب داشته باشیم میتوان k عنصر بعد از median را به صـورت مرتـب در پیچیدگی زمانی زیر چاپ کرد:
Anonymous Poll
16%
Kn
44%
K log n
25%
n + k log k
16%
n + k log n
برخی از تعریف ها در مورد گراف که لازم است به یاد داشته باشیم :

⬅️گراف متصل : گرافی که بین هر دو گره مسیری وجود داشته باشد را گراف متصل گویند.
⬅️گراف غیر متصل : گرافی است که حداقل بین دو گره آن هیچ مسیر وجود نداشته باشد. شرط لازم برای اینکه گرافی با n گره متصل باشد این است که حداقل 1 - n یال وجود داشته باشد.
⬅️گراف تهی : گرافی است که مجموعهای از گرهها باشد و هیچ یالی بین گرهها وجود نداشته باشد.
⬅️درجه هر گره : تعداد یالهایی که از یک گره عبور میکند را درجه آن گره گویند.
❗️تذکر : درجـه خروجی برای گرافهای جهتدار تعداد یالهای خارج شده از یک گره را نشان میدهد و درجه ورودی برای گرافهای جهتدار تعداد یالهایی که به یک گره وارد شدهاند میباشد. مجمـع درجـات گـرههـا در گرافهای بدون جهت دو برابر تعداد یالهاست و مجموع درجات ورودی یا مجموع درجات خروجی در گرافهای جهتدار تعداد یالها را نشان میدهد.

#الگوریتم

📣👨‍💻 @AlgorithmDesign_DataStructuer
👍1👏1
پیاده سازی Alpha-Beta

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
👏1
⁉️شاید تا الان براتون سوال پیش آماده باشد که Bias که در فرمول شبکه های عصبی هست چه طور به وجود می آید؟
اگر به شکل بالا دقت کنید دو شکلی میبینید که یکی از آن ها عرض از مبدا (C) ندارد و یکی از آن ها دارد اگر معادله خط به صورت زیر باشد :
y = mx + c
که در آن m شیب خط و x که دیتا های ورودی می باشد میتوان آن را به این صورت بیان کرد که :
m = weight
c = bias

که میتوان نوشت :
y = weight * x + bias

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
👍2👏1
فرض کنید که ماکزیمم – هیپ حاوي اعداد متمایز 1 تا 1023 است. حداکثر چند تا از اعداد بیشتر از 1000 میتواند در پایین ترین سطح درخت قرار گیرند؟
Anonymous Quiz
24%
10
40%
12
21%
13
14%
14
تابع هش (Hash Function) در ساختمان داده، به عنوان یکی از عناصر اصلی استفاده می‌شود. این تابع، ورودی‌های مختلف را به یک مقدار خروجی (معمولاً یک عدد) نگاشت می‌کند. هدف اصلی این تابع، تولید یک مقدار هش یکتا برای هر ورودی است، به طوری که اگر دو ورودی متفاوت باشند، مقدار هش آن‌ها نیز با احتمال بسیار زیاد متفاوت باشد.

توابع هش به طور گسترده در ساختمان داده‌ها مانند جدول هش (Hash Table) استفاده می‌شوند. در جدول هش، مقادیر ورودی (کلیدها) به عنوان ورودی به تابع هش داده می‌شوند و مقادیر خروجی (معمولاً اعداد صحیح) به عنوان شاخص‌ها یا آدرس‌های جایگزین در جدول هش استفاده می‌شوند.

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

مثالی از یک تابع هش ساده می‌تواند تابع ماژول گیری باشد که می‌تواند عدد ورودی را بر اساس یک مقدار ثابت مانند اندازه جدول هش به مقدار هش تبدیل کند. به عنوان مثال، اگر اندازه جدول هش را ( n ) در نظر بگیریم، می‌توانیم تابع هش را به صورت زیر تعریف کنیم:

h(x) = n mod x

این تابع هش، عدد ورودی ( x) را به یک عدد بین ۰ تا ( n-1 ) نگاشت می‌کند. این تابع هش به سرعت قابل محاسبه است و توزیع یکنواختی دارد. اما باید توجه داشت که تابع هش‌های ساده مانند تابع ماژول گیری، برای برخی موارد ممکن است به دلیل توزیع ناهمگن داده‌ها، بهینه نباشند. در مواردی مانند این، توابع هش پیچیده‌تری مانند توابع هش کریپتوگرافیکی استفاده می‌شوند.

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

S -> d - > e -> r -> f -> G
#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
👏1
سومین کوچکترین کلید در یک Heap Min با کلیدهاي متمـایز در درایـه هـایی بـا چـه اندیس هایی میتواند باشد؟(از چپ به راست)
Anonymous Quiz
22%
1,2,3
44%
2,3,4,5,6,7
27%
4,5,6,7
7%
1,2,3,4,5,6,7
👍1
زمان اجرای الگوریتم های معروف
نکاتی که میتوان درمورد زمان اجرای یک الگوریتم بدانیم به صورت زیر می باشد :
1-سرعت الگوریتم ن بر اساس ثانیه بلکه بر مبنای رشد تعداد عملیات اندازه گیری می شود.
2-در واقع , مقصود این است که با افزایش اندازه ی داده های ورودی زمان اجرای یک الگوریتم با چه سرعتی افزایش می یابد.
3-زمان اجرای الگوریتم های با نماد O بزرگ بیان می شود.
4-رشد O(log n) بیشتر از O(n) است , اما با رشد لیست موادی که جست و جو می کنید , سرعت آن بسیار بیشتر می شود.

#الگوریتم

📣👨‍💻 @AlgorithmDesign_DataStructuer
👍1
شبیه کد و مثالی از Expectimax

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
پیاده سازی رگرسیون خطی (Linear Regression) شامل مراحل زیر هست:

1️⃣تولید داده
2️⃣ساخت نورون یا پیاده‌سازی رابطه
3️⃣محاسبه خروجی نورون براساس داده ورودی و مدل رابطه
4️⃣محاسبه لاس یا اتلاف
5️⃣محاسبه گرادیان ها
6️⃣بروزرسانی وزن های نورون

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
👌1
یک درخت جستجوي باینري با کلمه "SEARCH "(از چپ بـه راسـت) بـسازید. تعـداد متوسط مقایسه براي پیدا کردن یک کاراکتر در این درخت برابر است با:
Anonymous Quiz
18%
2.83
47%
2.4
18%
2.6
18%
6
محاسبه اتلاف یا loss
درکل توابع اتلاف متنوعی با کارکردهای مختلف در یادگیری ماشین و شبکه عصبی وجود دارد. برای مساله رگرسیون، یکی از پرکاربردترین‌ها تابع اتلاف Mean Square Error (MSE) هست.

طبق رابطه بالا، MSE عبارتند از میانگینِ مربعِ اختلاف بین مقدار هدف یا واقعی (y) و مقدار پیش‌بینی‌شده توسط مدلی مانند رگرسیون خطی (a+bx). رابطه بالا در نامپای به‌صورت زیر پیاده‌سازی می‌شود:
error = (y - y_hat)

loss = (error ** 2).mean()


که در کد بالا y همان y واقعی می باشد و y_hat که از رابطه خطی y=wx+b به دست می آید که اختلاف این دو همان error به دست می آید.

#هوش_مصنوعی

📣👨‍💻 @AlgorithmDesign_DataStructuer
Stack memory :

حافظه پشته برای تخصیص حافظه استاتیک استفاده می شود و از ساختار آخرین ورودی، اولین خروجی (LIFO) پیروی می کند. از نظر دسترسی به داده بسیار سریع است اما از نظر اندازه محدودیت دارد. مهم است بدانید که انواع مقادیر مانند انواع اولیه، bool، int، float، char و ... (بستگی به زبان برنامه نویسی دارد) و ارجاعات به اشیاء اعلام شده در یک متد یا تابع معمولاً در پشته ذخیره می شوند. و هنگامی که متد وجود دارد (ما محدوده را داریم) حافظه اختصاص داده شده برای آن متغیرها به طور خودکار تخصیص داده می شود.
برای مثال :
void StackMemoryExampleMethod()
{
int num = 5; // 'num' is allocated on the stack
}

#الگوریتم

📣👨‍💻 @AlgorithmDesign_DataStructuer
فرض کنید A یک ماتریس m * n خلوت (Sparse ) باشد عناصـر غیرصـفر آن را بـه ترتیب سطري در یک آرایه، 3*t که t تعداد عناصـر غیرصـفر مـاتریس اسـت ذخیـره میکنیم. بهترین تابع زمان عمل ترانهاده گیري برابر است با ...
Anonymous Quiz
24%
t+m
34%
tm
24%
tn
17%
t+n
👍3
لیست پيوندي(Linked List) :
ليست پيوندي بر خلاف آرايه پوياست. به همين دليل درج و حذف در آن ساده تر و سريع تر از آرايه است. اما جستجو و مرت بسازي
ميتوانند در آرايه بسيار سريع تر انجام شوند . هر عنصر در ليست يك طرفه خطي از دو بخش تشكيل شده است كه يكي براي ذخيره مقدار و ديگري براي اشاره به عنصر بعدي ليست است. در ليست يك طرفه خطي نميتوان جستجوي دودويي انجام داد جستجوي خطي در ليست يك طرفه از مرتبه (n(O است .
براي حذف گره با آدرس مشخص از ليست يك طرفه ابتدا بايد ليست را تا يافتن گره قبل از آن پيمايش نمود. بنابراين عمليات حذف يك عنصر دلخواه از ليست يك طرفه خطي از مرتبه (n(O است. در حالي كه درج با فرض دانستن مكان آن از (1)O است .
براي دسترسي به عناصر ليست يك طرفه خطي لازم است آدرس عنصر ابتدايي را داشته باشيم. بنابراين گاهي براي هماهنگي اين عنصر با ديگر عناصر آن را مقدار دهي نمي كنند و در حقيقت اولين عنصر حاوي مقدار بعد از عنصر ابتدايي قرار مي گيرد. در اين حالت به عنصر ابتدايي «سر ليست» گفته مي شود .
آخرين اشاره گر ليست يك طرفه خطي null است. با تعريف ليست حلقوي يك طرفه اين اشاره گر به عنصر اول اشاره مي كند. در چنين ليستي با داشتن آدرس هر گره مي توان به كليه گره ها دسترسي داشت و معمولاً به خاطر ساده نمودن درج در ابتداي ليست آدرس گره انتهايي نگه داري مي شود. ليست حلقوي نيز مي تواند سر ليست داشته باشد .
در ليست پيوندي دو طرفه در هر گره دو اشاره گر وجود دارد كه يكي به گره بعدي و ديگري به گره قبلي در ليست اشاره مي كند. بنابراين با داشتن آدرس يك گره كليه گره ها قابل دستيابي هستند. حذف و درج در اين ليست با ليست يك طرفه تفاوت دارد و از مرتبه (1)O است.
#الگوریتم
📣👨‍💻 @AlgorithmDesign_DataStructuer