**الگوریتم جستجوی خطی** چیست

سلام .

من به تازگی دانشجو شدم ( البته دانشگاهی قبول نشدم ( کنکور ندادم ( دیپلم ندارم (مدرسه هنوز هست ))))

اما درس امروز مشغولی ( شوخی : مش+غول یا حج+غول ) بود که هیچ وقت با آن کنار نیامدم اما امروز بر ترس خویش قلبه کرده و قبیله تشکیل ندادم ( چرت و پرت )

اما غافل از اینکه این الگوریتم رو هزاران جا پیاده سازی کردم 🙂

و خوشحال

اما امروز آمدم تا دانش یکی دیگر رو که به x رسید و تکامل یافت و به y رسید تا … رو به شما یاد بدهم ( اگر یاد ندارید )

بابا . فقط یک تابع با ۱۰ خط کد هست 🙂 هورا

البته باید بگم که جستجو روی آرایه انجام می شود .

برای شما

جستجو خطی به انگلیسی = linear search

یکی از argument یک array با تایپش هست ، همچنین بهتر هست که const قبل نام arg باشد .

یکی دیگر سایز آن array هست . که از ۱ شروع می شود و نه از صفر ( به همین دلیل در حلقه for که بیشتر با آن اشنا خواهید شد از > به جای => استفاده شده )

و دیگری key هست . که تابع به دنبال آن در آرایه می گردد.

نکته : ترتیبی در نام پارامتر ها نیست اما بهتر هست که اولین ارگومان آرایه باشد .

این تابع در نهایت . index و نه سایز = index+1 رو بر می گرداند .

نکته این هست که نیاز به استفاده از long و یا unsigned نیست . زیرا بهتر هست از این نوع سرچ فقط برای آرایه های کوچک و کمتر از ۱۰۰۰ عضو استفاده بشود . ( هر چه کمتر بهتر اما محدودیتی نیست و شما اگر اندازه return value از چیزی بیشتر شود شما مجبورید از LONG و یا UNSIGNED / UNSIGNED LONG استفاده کنید )

سورس کد به همراه توضیحات

1234567891011// dependencies import include

int linearSearch(const char arr[] , int size , char key){
     for(int i =0; i < size; i++){
          if ( arr[i] == key){
              return i;
          }
     }
     return -1;
}

کد بالا برای زبان هایی مثل سی/سی++ و جاوا/سی شارپ هست

برای زبان پایتون کد زیر مناسب هست

1234567def linearSearch(arr , size , key):
      int i=0
      while ( i < size):
            if arr[i] == key:
                return i;
       i += 1
    return -1;

اکنون با نگاه به کن پایتون در شگفت خواهید بود که دیگر نیازی به تایپینگ نیست و نیاز نیست دایم تایپ ای را برای توابع در نظر بگیریم ( که سخت در اشتباه هستید ) .

زیرا در سی++ می توان overload کرد ( استفاده از توابع همنام با declaration غیر یکسان ) و همچنین از template ها و یا مثل من از پایتون بدتان آمد زیرانه تنها امکان اختلال زمان اجرا و اررور و غیره بیشتر هست و همچنین افتضاح تر هست ( البته پایتون عالیه 🙂

در اکثر زبان های برنامه نویسی اگر تابعی چیزی را return کند تابع از اجرا متوقف می شود ( حتی اگر void باشد که آنگاه از return; استفاده می شود ) اکنون اگر تابعی نتیجه ای یافته باشد عددی صحیح برگردانده و تابع تمام می شود و یا هیچ چیزی پیدا نمی شود که -۱ برگردانده می شود

تعریف کد:

متغییر i برابر با ۰ کن تا زمانی که i ( که نشان دهنده index ارایه هست ) کوچکتر از سایز آرایه باشد . کد زیر را اجرا کن و به i یک واحد اضافه کن

کد زیر:
اگر ایندکس i از آرایه برابر با مقدار key بوده index را برگردان و با حلقه پایان بده .

کد بعد کد زیر :

{اگر با هیچ شرطی کد تمام نشد} مقدار -۱ رو برگردان ( اکثرا -۱ به خاطر این که حسابی{0,1…,} و طبیعی{1,2,3…,} نیست و همچنین برابر با EOF ( End Of File ) هست )

معادل پاندکسی ( پاندکس از نو در حال ساخت هست و پاندکس جدید توسعه متوقف شده دارد )

‍‍‍‍

12345678910111213; arr , size , key
linearSearch:
    var count
    call add ( $2 , 1 , &count )
    for $count call _linear ( $1 , %iter , $3 )
    ret -1
_linear:
   var res
   var result 
   call index_arr ( $1 , $2 , &res )
   call  compare ( res , $3 , __eq__ , &result)
   if result then ret result 
   

امیدوارم خوشتان آمده باشد 🙂

نویسنده مطلب: pooia

منبع مطلب

به فکر سرمایه‌گذاری هستی؟

با هر سطحی از دانش در سریع‌ترین زمان با آموزش گام به گام، سرمایه گذاری را تجربه کن. همین الان میتونی با لینک زیر ثبت نام کنی و ۱۰ درصد تخفیف در کارمزد معاملاتی داشته باشی

ثبت نام و دریافت جایزه
ممکن است شما بپسندید
نظرات
  1. Cloner می گوید

    اگه اولش ننویسی قبول نشدم و دیپلم ندارم و قلبه و قبیله و اینا بهتره
    چون وقتی من بازید کننده اومدم تو سایت
    این حرفارو خوندم
    گفتم بچه مدرسه ای هست
    هیچی بلد نیست
    کد اشتباه داده حتما

    پس اصلا رجوع نکردم به توضیحاتت !!

نظر شما درباره این مطلب

آدرس ایمیل شما منتشر نخواهد شد.