AlgoVerse

جستجوی خطی

عضوها را یکی‌یکی از ابتدا با مقدار مورد جستجو مقایسه می‌کند تا آن را پیدا کند یا آرایه تمام شود.

ساده‌ترین جستجو: از ابتدای آرایه شروع کن و هر عضو را با target مقایسه کن. اولین جایی که برابر بود، اندیسش را برگردان؛ اگر به انتها رسیدی، −1.

ادامه‌ی توضیح ↓
ورودی:
n=8 · target=27خروجی PDF

هشت عدد نامرتب؛ ۲۷ در خانه‌ی ۵ پیدا می‌شود.

  1. def linear_search(a, target):
  2. for i in range(len(a)):
  3. if a[i] == target:
  4. return i
  5. return -1

ناوردا: در شروع هر دور، target در a[0..i−1] نیست.

شروع اجرا

target 27310411592263414275586127

متغیرهای محلی

target27

نارنجی = در همین گام عوض شد

a list

3141592641275812

Call stack

  1. linear_search()خط 1
گام ۱ از ۱۴
خط سیاه = compare · خط نارنجی = گام کلیدیcompare: 0/6 · found: 0/1

    رشد تعداد عملیات با اندازه‌ی ورودی

    میانگین ۱۲ گراف تصادفی برای هر n (با seed ثابت). نشانگر توخالی = ورودی فعلی.

    • comparisons
    • ورودی فعلی (n=8)
    05101546810121416n = تعداد عضوهای آرایهcomparisons
    نمایش به شکل جدول
    ncomparisons
    43.4
    64.4
    85.6
    107.4
    128.9
    149.3
    1612.2
    توضیح

    ایده

    ساده‌ترین جستجو: از ابتدای آرایه شروع کن و هر عضو را با target مقایسه کن. اولین جایی که برابر بود، اندیسش را برگردان؛ اگر به انتها رسیدی، −1.

    هزینه

    • بهترین حالت ۱ مقایسه، بدترین حالت n مقایسه، و به‌طور متوسط حدود n/2: O(n).
    • برخلاف جستجوی دودویی به مرتب بودن آرایه نیاز ندارد و همیشه اولین تکرار را پیدا می‌کند.

    در trace به چه چیزی نگاه کنی

    • فلش i روی آرایه جلو می‌رود و خط‌چین آبی ارتفاع target است.
    • ورودی «در آرایه نیست» را با همان ورودی در جستجوی دودویی (بعد از مرتب کردن) مقایسه کن.