1.1 Sadə metodların tərifi
Sadə metodlar (birbaşa həll) — bu, məsələləri həll etmək üçün sadə, düz yanaşmalardır ki, çox vaxt vaxt və ya yaddaş baxımından optimallaşdırılmayıb. Onlar mürəkkəb optimizasiyaları nəzərə almayan əsas, aydın addımlara əsaslanır.
Belə metodlar problemi ilkin olaraq anlamaq və ya daha mürəkkəb alqoritmlərlə müqayisə üçün baza variantı kimi faydalı ola bilər.
Üstünlüklər:
1. Reallaşdırma asanlığı:
Sadə metodlar çox vaxt başa düşmək və reallaşdırmaq baxımından asan olur ki, bu da onları məsələnin həlli üçün yaxşı başlanğıc nöqtəsi edir.
2. Anlaşıqlı olması:
Bu metodlar birbaşa yanaşmaya əsaslanır ki, bu da onları asanlıqla izah edilə bilən və yeni başlayanlar üçün anlaşıqlı edir.
3. İlkin qiymətləndirmə:
Onlar daha mürəkkəb və optimallaşdırılmış alqoritmlərlə müqayisə üçün baza variantı kimi istifadə edilə bilər.
Çatışmazlıqlar:
1. Aşağı performans:
Sadə metodlar çox vaxt yüksək vaxt mürəkkəbliyinə malikdir ki, bu da onları böyük məlumatlarla işləmək üçün yararsız edir.
2. Effektivsizlik:
Optimallaşdırmaların olmamasına görə lazım olduğundan daha çox resurs istifadə edə bilərlər.
3. Məhdud tətbiq sahəsi:
Bu metodlar mürəkkəb məsələlər və ya yüksək effektiv həllər tələb edən məsələlər üçün qeyri-praktik ola bilər.
1.2 Sadə məsələlərin nümunələri
Sadə metodlarla həll olunan məsələlər:
Ədədin sadəliyini yoxlama:
Sadə metod ədədin 2
-dən n-1
-ə qədər olan bütün ədədlərə bölünüb-bölünmədiyini yoxlamaqdan ibarətdir.
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
# İstifadə nümunəsi:
number = 29
print(is_prime(number)) # Çıxış: True
Ən böyük ümumi bölən (ƏBÜB) hesablanması:
Sadə metod iki ədədin minimumundan başlayıb 1-ə qədər bütün ədədləri yoxlamaq və ən böyük böləni tapmaqdan ibarətdir.
def gcd_naive(a, b):
gcd = 1
for i in range(1, min(a, b) + 1):
if a % i == 0 and b % i == 0:
gcd = i
return gcd
# İstifadə nümunəsi:
a = 48
b = 18
print(gcd_naive(a, b)) # Çıxış: 6
1.3 Daha çətin problemlər üçün nümunələr
Sətir daxilində alt-sətirin tapılması:
Sadə metod sətirdəki hər bir mümkün mövqeyi ardıcıl olaraq yoxlamaqdan ibarətdir.
def naive_search(text, pattern):
n = len(text)
m = len(pattern)
for i in range(n - m + 1):
match = True
for j in range(m):
if text[i + j] != pattern[j]:
match = False
break
if match:
return i
return -1
# İstifadə nümunəsi:
text = "hello world"
pattern = "world"
print(naive_search(text, pattern)) # Çıxış: 6
Ən yaxın nöqtələr cütünü tapmaq:
Sadə metod hər bir nöqtə cütü arasındakı məsafəni yoxlamaq və minimal məsafəni tapmaqdan ibarətdir.
import math
def closest_pair_naive(points):
min_distance = float('inf')
closest_pair = None
n = len(points)
for i in range(n):
for j in range(i + 1, n):
distance = math.dist(points[i], points[j])
if distance < min_distance:
min_distance = distance
closest_pair = (points[i], points[j])
return closest_pair, min_distance
# İstifadə nümunəsi:
points = [(1, 2), (3, 4), (5, 6), (7, 8)]
print(closest_pair_naive(points)) # Çıxış: ((1, 2), (3, 4)), 2.8284271247461903
Bütün bu alqoritmləri təkmilləşdirmək olar, amma bir şeyi təkmilləşdirməzdən əvvəl — sadə həlli yazın. Ola bilər ki, əgər bu həll sizdə bir və ya iki dəfə işləyirsə — bu yetərli olacaq.
Nə qədər sadə həll olarsa, o qədər az səhv və gizli problemlər olur. Sadə həllə yeni funksionallıq əlavə etmək asandır. Bu kodu oxumaq və anlamaq da asandır. Vaxtından əvvəl optimallaşdırma isə bütün problemlərin mənbəyidir.
GO TO FULL VERSION