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

سلام .

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

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

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

و خوشحال

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


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

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

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

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

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

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

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

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

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


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

// 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;
}

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

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

def 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 ) هست )

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

‍‍‍‍

; 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 
   

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