درحال برنامه نویسی
**الگوریتم جستجوی خطی** چیست
سلام .
من به تازگی دانشجو شدم ( البته دانشگاهی قبول نشدم ( کنکور ندادم ( دیپلم ندارم (مدرسه هنوز هست ))))
اما درس امروز مشغولی ( شوخی : مش+غول یا حج+غول ) بود که هیچ وقت با آن کنار نیامدم اما امروز بر ترس خویش قلبه کرده و قبیله تشکیل ندادم ( چرت و پرت )
اما غافل از اینکه این الگوریتم رو هزاران جا پیاده سازی کردم :)
و خوشحال
اما امروز آمدم تا دانش یکی دیگر رو که به 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
امیدوارم خوشتان آمده باشد :)
مطلبی دیگر از این انتشارات
چرا با اینکه برنامه نویس بودم مهندسی کامپیوتر نخواندم
مطلبی دیگر از این انتشارات
آموزش الگوریتم های گوگل به زبان ساده
مطلبی دیگر از این انتشارات
آموزش برنامه نویسی PHP