دوست عزیز، به سایت علمی نخبگان جوان خوش آمدید

مشاهده این پیام به این معنی است که شما در سایت عضو نیستید، لطفا در صورت تمایل جهت عضویت در سایت علمی نخبگان جوان اینجا کلیک کنید.

توجه داشته باشید، در صورتی که عضو سایت نباشید نمی توانید از تمامی امکانات و خدمات سایت استفاده کنید.
نمایش نتایج: از شماره 1 تا 4 , از مجموع 4

موضوع: الگوریتم های جستجو

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    دوست آشنا
    رشته تحصیلی
    C@/\/\P\/T(-R
    نوشته ها
    1,138
    ارسال تشکر
    8,061
    دریافت تشکر: 4,739
    قدرت امتیاز دهی
    7123
    Array
    Outta_Breathe1020's: جدید59

    پیش فرض الگوریتم های جستجو

    الگوریتم های جستجو
    زبان C

    موارد زيادي پيش مي آيند که قصد داريم به دنبال يک داده در يک آرايه جستجو کرده و مکان آن را پيدا کنيم. در این تاپیک دو روش متداول جستجو را مورد بررسي قرار مي دهيم. البته معمولا براي عمل جستجو از ساختمان داده هاي پيچيده تري همچون درختهاي جستجوي دودويي استفاده مي گردد.

    جستجوی خطی

    جستجوي خطي، ساده ترين نوع جستجو است که در آرايه هاي نامرتب استفاده مي شود. در اين روش داده مورد نظر به ترتيب با تک تک عناصر آرايه مقايسه مي شود تا مکان آن پيدا شود. تابع زير پياده سازي اين جستجو را نشان مي دهد: (دريافت برنامه)


    کد:
    
     
    int  linearSearch(int  A[], int n, int x) {
        int i;
       
      ++ for (i=0; i<n; i) 
            if (x == A[i] )  return(i);
        return(-1) ;
    }
    در تابع فوق، پارامتر A آرايه موردنظر و n اندازه آن را مشخص مي نمايد. پارامتر x نيز داده اي است که بدنبال آن جستجو مي کنيم. همانطور که مي بينيد جستجو را از اولين خانه آرايه شروع کرده و چنانچه x با هريک از عناصر آرايه برابر بود، بلافاصله مکان آن را باز مي گردانيم. در پايان چنانچه داده موردنظر پيدا نشد، مقدار -1 را باز مي گردانيم.

    اگر آرايه داراي n عنصر باشد، در بدترين حالت نياز به n مقايسه براي پيدا کردن داده مورد نظر داريم و اين در صورتي است که داده در آخرين مکان آرايه قرار داشته باشد. اما از آنجا که احتمال قرار گرفتن داده در هريک از مکانهاي آرايه يکسان است، بطور متوسط نياز به n/2 مقايسه خواهيم داشت. اين تعداد مقايسه براي آرايه هاي بزرگ، زمان زيادي را صرف خواهد کرد. بطور کلي اين روش فقط براي آرايه هاي کوچک مناسب است.



    جستجوی دودویی

    چنانچه آرايه مورد جستجو مرتب شده باشد، روش بسيار کاراتري براي جستجو وجود دارد. اين روش که به جستجوي دودويي موسوم است، با هربار مقايسه، نيمي از عناصر آرايه را از بازه جستجو حذف مي نمايد. در نتيجه جستجو در يک آرايه بزرگ با سرعت بسيار زيادي صورت مي پذيرد.

    براي تشريح الگوريتم، فرض کنيد آرايه موردنظر بصورت صعودي مرتب شده است. ابتدا عنصر وسط آرايه را پيدا کرده و داده مورد جستجو را با آن مقايسه مي کنيم. سه حالت ممکن است رخ دهد:


    • اگر داده مورد جستجو با عنصر وسط آرايه مساوي باشد، داده پيدا شده و مکان آن را باز مي گردانيم.
    • اگر داده مورد جستجو از عنصر وسط آرايه کوچکتر باشد، بنابراين بايد در نيمه اول آرايه به دنبال آن جستجو نماييم.
    • اگر داده مورد جستجو از عنصر وسط آرايه بزرگتر باشد، بنابراين بايد در نيمه دوم آرايه به دنبال آن جستجو نماييم.


    چنانچه حالت اول رخ دهد، جستجو پايان يافته و مکان داده بازگردانده مي شود.
    اما اگر حالت دوم يا سوم رخ دهد، عمليات جستجو به روش فوق مجددا براي نيمه اول يا نيمه دوم آرايه تکرار مي شود. بدين ترتيب بازه مورد جستجو به نيمي از آرايه کاهش مي يابد. با تکرار اين عمليات هربار بازه مورد جستجو نصف مي شود. عمليات تا زماني ادامه مي يابد که يا داده مورد نظر پيدا شود و يا بازه مورد جستجو آنقدر کوچک شود که داده اي باقي نماند (يعني طول بازه مورد جستجو به صفر برسد)، که در اينصورت داده در آرايه وجود ندارد.

    به نحوه پياده سازي اين الگوريتم توجه نماييد: (دريافت برنامه)


    کد:
    int binarySearch(int A[], int n, int x) { int low, high, mid; low = 0; high = n-1; while (low <= high) { mid = (low + high) / 2; if (x == A[mid]) return(mid); else if (x < A[mid]) high = mid-1; else low = mid + 1; } return(-1); }


    در تابع فوق، پارامتر A آرايه موردنظر و n اندازه آن را مشخص مي نمايد. پارامتر x نيز داده اي است که بدنبال آن جستجو مي کنيم.متغيرهاي محلي low و high به ترتيب حد بالا و حد پايين بازه مورد جستجو را نشان مي دهند.

    متغير mid نيز براي محاسبه مکان وسط بازه جستجو بکار مي رود. در ابتدا بازه جستجو برابر کل آرايه است، لذا low برابر 0 و high برابر n-1 قرار دارد. در هر مرحله (هر بار اجراي حلقه)، بسته به نتيجه مقايسه عنصر مورد جستجو (x) و عنصر وسط بازه جستجو (A[mid])، مقدار low يا high بروزرساني مي شود که باعث مي شود بازه جستجو نصف شود. چنانچه low از high بزرگتر شود، طول بازه جستجو به صفر رسيده است و در نتيجه حلقه خاتمه يافته و مقدار -1 به معناي پيدا نشدن داده بازگردانده مي شود.



    1020
    ویرایش توسط Outta_Breathe1020 : 28th December 2012 در ساعت 07:36 AM
    و مجازات تخفیف یافته ات این بار حبس ابد در این دنیاست...!!!

    Nearly 1 billion people go to bed hungry every night and every year 2 million children die from malnutrition

    شاید صدای مرگ بود که میگفت: تو هم اگر قاتل نباشی، سارق حیات این ها بوده ای...

  2. کاربرانی که از پست مفید Outta_Breathe1020 سپاس کرده اند.


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. الگوریتم دیکسترا به زبان C# or C++ or C
    توسط loknatesabz در انجمن برنامه نویسی
    پاسخ ها: 0
    آخرين نوشته: 10th December 2011, 07:19 AM
  2. الگوریتم های فرا اکتشافی جستجو (الگوریتم های ژنتیک)
    توسط Bad Sector در انجمن بخش مقالات وب و اینترنت
    پاسخ ها: 0
    آخرين نوشته: 15th July 2011, 11:17 AM
  3. الگوریتم دایکسترا
    توسط آبجی در انجمن برنامه نویسی تحت سیستم عامل
    پاسخ ها: 0
    آخرين نوشته: 12th June 2010, 12:47 PM
  4. استالین دو بار مانع از ترور هیتلر شده بود
    توسط Isengard در انجمن سایر موضوعات جنگ
    پاسخ ها: 0
    آخرين نوشته: 1st June 2010, 10:31 PM

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •