Linear Search یعنی تک‌تک عناصر را چک کنی تا مقدار پیدا شود. پایهٔ درک پیچیدگی و مقایسه با جستجوی دودویی است.

ایدهٔ ساده پشت جستجوی خطی

از اول آرایه تا آخر حرکت می‌کنی و هر عنصر را با هدف مقایسه می‌کنی. اگر برابر بود ایندکس را برمی‌گردانی، وگرنه «پیدا نشد». پیچیدگی زمانی در بدترین حالت O(n) است.

جستجوی خطی: ساده‌ترین الگوریتم جستجو با مثال واقعی
جستجوی خطی: ساده‌ترین الگوریتم جستجو با مثال واقعی

کی کافی است؟

برای لیست کوتاه، دادهٔ بدون ترتیب، یا وقتی هزینه برای مرتب‌سازی بیشتر از جستجو است. وقتی داده مرتب و بزرگ است، جستجوی دودویی معمولاً بهتر است.

همیشه قبل از بهینه‌سازی، اندازهٔ واقعی n را بسنج؛ گاهی linear search خواناتر و کافی است.

پیاده‌سازی ذهنی

حلقه از i=0 تا n-1، مقایسه، بازگشت زودهنگام. مراقب ایندکس خارج از محدوده و مقادیر null باش. در تست، حالت خالی، اول لیست، آخر لیست و ناموجود را پوشش بده.

جستجوی خطی: ساده‌ترین الگوریتم جستجو با مثال واقعی
جستجوی خطی: ساده‌ترین الگوریتم جستجو با مثال واقعی

مقایسه با binary search

دودویی سریع‌تر است ولی پیش‌فرض مرتب بودن می‌خواهد. هزینهٔ مرتب‌سازی را در تحلیل کل سیستم حساب کن، نه فقط یک فراخوانی جستجو.

تمرین

تابعی بنویس که اولین کاربر با ایمیل مشخص را در لیست پیدا کند و تعداد مقایسه‌ها را لاگ کند. بعد همان داده را sort کن و با دودویی مقایسه کن.

جمع‌بندی

جستجوی خطی آجر اول الگوریتم‌هاست. سادگی‌اش کمک می‌کند پیچیدگی و trade-off را حس کنی—پایهٔ انتخاب ساختار دادهٔ بهتر.

نکته‌های اجرایی برای هفتهٔ بعد

برای موضوع «الگوریتم» یک هدف کوچک هفتگی بنویس که قابل اندازه‌گیری باشد: مثلاً یک تمرین، یک PR آموزشی، یا یک صفحهٔ خلاصه. یادگیری بدون خروجی بیرونی خیلی زود تبخیر می‌شود.

زمان مطالعه را به بلوک‌های ۲۵–۴۰ دقیقه‌ای بشکن و آخر هر بلوک یک جمله از «چیزی که اشتباه می‌فهمیدم» یادداشت کن. همین یادداشت‌ها بعداً منبع پست یا چیت‌شیت خودت می‌شوند.

اگر شغل تمام‌وقت داری، به‌جای انتظار برای آخر هفتهٔ آزاد، سه بلوک کوتاه وسط هفته را در تقویم قفل کن. ثبات کم‌حجم از انفجار ناگهانی مطالعه پایدارتر است و مغز فرصت تثبیت دارد.

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

اتصال به بقیهٔ مسیر یادگیری

هر مفهوم را به یک پروژهٔ زنده وصل کن—حتی اگر پروژهٔ شخصی باشد. لینک داخلی به دسته‌بندی وبلاگ و کمک می‌کند مسیرت از مقالهٔ تکی به مهارت انباشته تبدیل شود.

در تیم، آموخته را در قالب کوتاه برای همکار توضیح بده. اگر نتوانستی ساده توضیح دهی، هنوز نقطهٔ مبهم داری و این بهترین سیگنال برای دور بعدی مطالعه است.

یک پوشهٔ شخصی «learnings» بساز و برای هر موضوع سه فایل نگه دار: خلاصه، مثال کد، و لیست اشتباهات. بعد از یک ماه، همین پوشه از هر کتاب پراکنده برایت کاربردی‌تر می‌شود.

چک‌لیست کیفیت فهم

  • می‌توانم مسئله را در دو جمله برای غیرمتخصص بگویم
  • یک مثال حل‌شده با دست دارم
  • یک ضدمثال یا دام رایج می‌شناسم
  • می‌دانم قدم بعدی تمرین چیست
  • می‌توانم یک تمرین ۱۰ دقیقه‌ای برای فرد تازه‌کار طراحی کنم

اگر بیشتر این موارد برقرار بود، برو سراغ موضوع بعدی. اگر نه، همان بخش را با پروژهٔ کوچک‌تر تکرار کن. کیفیت از عمق می‌آید، نه از تعداد تب‌های باز.

خطای شناختی رایج در مسیر فنی

خیلی‌ها consum کردن محتوا را با پیشرفت اشتباه می‌گیرند: ویدیو دیدن، هایلایت کردن، ذخیره کردن مقاله. پیشرفت وقتی است که بتوانی بدون نگاه به منبع، مسئله را حل کنی یا باگ را ایزوله کنی. برای «الگوریتم» همین معیار را بگذار.

دومین خطا مقایسهٔ سرعت خودت با دیگران در شبکه‌های اجتماعی است. مسیرها فرق دارد؛ فقط روند هفتگی خودت را با هفتهٔ قبل خودت بسنج. اگر خروجی تمرین بیشتر شده، روی مدار درستی.

آخر هر هفته فقط به یک سؤال جواب بده: «چه چیزی را این هفته می‌توانم انجام دهم که هفتهٔ پیش بلد نبودم؟» اگر جواب خالی بود، روش مطالعه را عوض کن نه لزوماً موضوع را.

پیشنهاد بستهٔ تمرینی ۷ روزه

  • روز ۱: خلاصهٔ یک‌صفحه‌ای از مفاهیم کلیدی
  • روز ۲: پیاده‌سازی کوچک‌ترین مثال ممکن
  • روز ۳: شکستن عمدی مثال و دیباگ
  • روز ۴: توضیح برای یک دوست فرضی
  • روز ۵: اتصال به یک پروژهٔ واقعی کوچک
  • روز ۶: مرور اشتباهات و بازنویسی خلاصه
  • روز ۷: استراحت فعال + فهرست سؤالات باز

این بسته را برای «الگوریتم» شخصی‌سازی کن و در تقویم بگذار. اگر روزی جا ماندی، زنجیره را از نو شروع نکن؛ از همان روز بعدی ادامه بده. کمال‌گرایی قاتل پیوستگی است.

جمع‌بندی نهایی این بخش

مقاله نقطهٔ شروع است، نه خط پایان. با تمرین اندازه‌پذیر، پروژهٔ کوچک، و بازبینی هفتگی، «الگوریتم» از سطح آشنایی به سطح مهارت قابل استفاده در کار می‌رسد. هر وقت گیر کردی، به یا دستهٔ مرتبط وبلاگ برگرد و همان مفهوم را از زاویهٔ دیگر ببین.

این مطلب برای چه کسی مناسب است؟

برای برنامه‌نویس‌ها و علاقه‌مندانی که می‌خواهند مفهوم را عملی و بدون حاشیه یاد بگیرند.

چطور تمرین کنم؟

همان روز یک مینی‌پروژه یا تمرین کوتاه از بخش‌های مقاله بساز و نتیجه‌اش را یادداشت کن.

قدم بعدی چیست؟

بعد از فهم پایه، یک پروژه کوچک انتخاب کن و مفاهیم را داخل همان پروژه تکرار کن؛ یادگیری با پروژه ماندگارتر است.