سلام! سخنرانی امروز کمی متفاوت از بقیه خواهد بود. تفاوت آن در این است که فقط به طور غیر مستقیم با جاوا مرتبط است. با این حال، این موضوع برای هر برنامه نویسی بسیار مهم است. ما در مورد الگوریتم ها صحبت خواهیم کرد . الگوریتم چیست؟ به عبارت ساده، این یک توالی مشخص از اقدامات است که باید برای رسیدن به نتیجه مطلوب انجام شود . ما اغلب از الگوریتم ها در زندگی روزمره استفاده می کنیم. به عنوان مثال، هر روز صبح با یک وظیفه روبرو می شوید: به مدرسه یا محل کار بیایید و در عین حال باشید:
- لباس پوشیده
- تمیز
- خوب تغذیه شده
- با یک ساعت زنگ دار از خواب بیدار شوید.
- دوش بگیرید، صورت خود را بشویید.
- صبحانه را آماده کنید، قهوه/چای درست کنید.
- بخور
- اگر از عصر لباسهایتان را اتو نکردهاید، آنها را اتو کنید.
- لباس بپوش.
- خانه را ترک کن.
- خرید یا بارگیری در اینترنت "فرهنگ لغت نام های شخصی روسی" نسخه 1966.
- هر نامی را در لیست ما در این فرهنگ لغت پیدا کنید.
- روی یک کاغذ بنویسید نام در کدام صفحه از فرهنگ لغت است.
- با استفاده از یادداشت ها روی یک تکه کاغذ، نام ها را به ترتیب قرار دهید.
for
که این کار را انجام می دهد
int[] numbers = new int[100];
// ..заполняем массив числами
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
ما نگاهی بیندازید ). اگر اکنون اولین عدد در لیست ما عدد باشد و عدد y را در ابتدای لیست وارد کنیم، تنها چیزی که نیاز است این است: х
x.previous = y;
y.previous = null;
y.next = x;
برای این تعریف مجدد مرجع، برای ما مهم نیست که اکنون چند عدد وجود داردLinkedList
- حداقل یک، حداقل یک میلیارد. پیچیدگی الگوریتم ثابت خواهد بود - O(1).
GO TO FULL VERSION