سلام! درس امروز کمی متفاوت از بقیه خواهد بود. تفاوت آن در این است که فقط به طور غیر مستقیم با جاوا مرتبط است. گفته می شود، این موضوع برای هر برنامه نویسی بسیار مهم است. ما در مورد الگوریتم ها صحبت خواهیم کرد . الگوریتم چیست؟ به عبارت ساده تر، برای دستیابی به نتیجه دلخواه، باید دنباله ای از اقدامات انجام شود . ما اغلب در زندگی روزمره از الگوریتم ها استفاده می کنیم. به عنوان مثال، هر روز صبح شما یک کار خاص دارید: به مدرسه یا محل کار بروید و در همان زمان باشید:
- لباس پوشیده
- تمیز
- فدرال رزرو
- با استفاده از ساعت زنگ دار بیدار شوید.
- دوش بگیرید و خود را بشویید.
- صبحانه و قهوه یا چای درست کنید.
- بخور
- اگر عصر قبل لباسهایتان را اتو نکردید، آنها را اتو کنید.
- لباس بپوش.
- خانه را ترک کن.
- نسخه 1961 سومین دیکشنری بین المللی جدید وبستر را بخرید یا دانلود کنید.
- هر نامی را از لیست ما در این فرهنگ لغت پیدا کنید.
- روی یک تکه کاغذ، صفحه فرهنگ لغت که نام در آن قرار دارد را بنویسید.
- از تکه های کاغذ برای مرتب کردن نام ها استفاده کنید.
for
که این کار را انجام می دهد
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
پیچیدگی این الگوریتم چقدر است؟ خطی، یعنی O(n). تعداد اقداماتی که برنامه باید انجام دهد بستگی به تعداد اعداد ارسالی به آن دارد. اگر 100 عدد در آرایه وجود داشته باشد، 100 عمل (عبارت برای نمایش رشته ها روی صفحه) وجود خواهد داشت. اگر 10000 عدد در آرایه وجود داشته باشد، 10000 عمل باید انجام شود. آیا الگوریتم ما به هیچ وجه قابل بهبود است؟ خیر. مهم نیست که چه اتفاقی می افتد، ما باید N را از آرایه عبور دهیم و N دستور را برای نمایش رشته ها در کنسول اجرا کنیم. مثال دیگری را در نظر بگیرید.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
یک خالی داریم LinkedList
که چند عدد در آن وارد می کنیم. ما باید پیچیدگی الگوریتمی درج یک عدد واحد را در LinkedList
مثال خود و اینکه چگونه به تعداد عناصر موجود در لیست بستگی دارد، ارزیابی کنیم. پاسخ O(1) است، یعنی پیچیدگی ثابت . چرا؟ توجه داشته باشید که هر عدد را در ابتدای لیست درج می کنیم. علاوه بر این، به یاد خواهید آورد که وقتی یک عدد را در یک عدد وارد می کنید LinkedList
، عناصر به هیچ کجا حرکت نمی کنند. پیوندها (یا مراجع) به روز می شوند (اگر فراموش کرده اید که چگونه LinkedList کار می کند، به یکی از درس های قدیمی
ما نگاه کنید ). اگر اولین عدد در لیست ما باشد x
و عدد y را در جلوی لیست وارد کنیم، تنها کاری که باید انجام دهیم این است:
x.previous = y;
y.previous = null;
y.next = x;
وقتی پیوندها را بهروزرسانی میکنیم، اهمیتی نمیدهیم که در حال حاضر چند عدد وجود داردLinkedList
، یک یا یک میلیارد. پیچیدگی الگوریتم ثابت است، یعنی O(1).
GO TO FULL VERSION