Salam! Bugünkü mühazirə digərlərindən bir az fərqli olacaq. O, yalnız dolayı yolla Java ilə əlaqəli olması ilə fərqlənəcək. Ancaq bu mövzu hər bir proqramçı üçün çox vacibdir. Alqoritmlər haqqında danışacağıq . Alqoritm nədir? Sadə dillə desək, bu, istənilən nəticəni əldə etmək üçün yerinə yetirilməli olan müəyyən hərəkətlər ardıcıllığıdır . Gündəlik həyatda alqoritmlərdən tez-tez istifadə edirik. Məsələn, hər səhər bir vəzifə ilə qarşılaşırsınız: məktəbə və ya işə gəlmək və eyni zamanda:
- Geyinmiş
- Təmiz
- Yaxşı qidalanmış
- Zəngli saata oyan.
- Duş qəbul edin, üzünüzü yuyun.
- Səhər yeməyi hazırlayın, qəhvə/çay dəmləyin.
- Yemək.
- Əgər axşamdan bəri paltarlarınızı ütüləməmisinizsə, onları ütüləyin.
- Geyinmək.
- Evi tərk et.
- İnternetdə "Rus Şəxsi Adlar Lüğəti" 1966-cı il nəşrini satın alın və ya yükləyin.
- Siyahımızdakı bütün adı bu lüğətdə tapın.
- Adın lüğətin hansı səhifəsində olduğunu bir kağız parçasına yazın.
- Kağızdakı qeydlərdən istifadə edərək adları sıra ilə qoyun.
for
Bu tapşırığı yerinə yetirən müntəzəm bir döngə yazırsınız
int[] numbers = new int[100];
// ..заполняем массив числами
for (int i: numbers) {
System.out.println(i);
}
Yazılı alqoritmin mürəkkəbliyi nədir? Xətti, O(N). Proqramın yerinə yetirməli olduğu hərəkətlərin sayı ona tam olaraq neçə nömrənin ötürülməsindən asılıdır. Massivdə 100 ədəd varsa, 100 hərəkət (ekranda çıxış) olacaq.Massivdə 10.000 ədəd varsa, 10.000 hərəkətin yerinə yetirilməsi lazımdır. Alqoritmimizi təkmilləşdirmək olarmı? Yox. İstənilən halda, N-nin massivdən keçməsini və konsola N çıxışını yerinə yetirməli olacağıq . Başqa bir misala baxaq.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
LinkedList
İçərisinə bəzi nömrələr daxil etdiyimiz boş nömrəmiz var . LinkedList
Nümunəmizə tək nömrə daxil etmək üçün alqoritmin mürəkkəbliyini və bunun siyahıdakı elementlərin sayından necə asılı olduğunu təxmin etməliyik . Cavab O(1) - sabit mürəkkəblikdir . Niyə? Diqqət edin: hər dəfə siyahının əvvəlinə nömrə daxil edirik. Bundan əlavə, xatırladığınız kimi, nömrələri elementlərə daxil edərkən , onlar heç bir yerə köçürülmür - bağlantılar yenidən müəyyən edilir (birdən LinkedList-in necə işlədiyini unutmusunuzsa, köhnə mühazirələrimizdənLinkedList
birinə baxın ). Əgər indi siyahımızda birinci nömrə nömrədirsə və siyahının əvvəlinə y rəqəmini daxil ediriksə, lazım olan tək şey: х
x.previous = y;
y.previous = null;
y.next = x;
Bu istinadın yenidən tərifi üçün indi neçə ədədin olması bizim üçün fərqi yoxdurLinkedList
- ən azı bir, ən azı bir milyard. Alqoritmin mürəkkəbliyi sabit olacaq - O(1).
GO TO FULL VERSION