ما معنى NAND في الخوارزميات وهياكل البيانات؟ شرح مبسّط مع أمثلة

شروحات تقنية

اختصار NAND يعني «Not AND»، أي «ليس AND» أو نفي بوابة AND. وهي بوابة منطقية (Logic Gate) تأخذ مدخلَين أو أكثر (كل مدخل قيمته إمّا 0 أو 1) وتُخرج القيمة 0 فقط عندما تكون كل المداخل تساوي 1، وفي كل الحالات الأخرى تُخرج 1. باختصار: هي عكس نتيجة بوابة AND تمامًا. عندما تصادف NAND في مساق الخوارزميات وهياكل البيانات فالمقصود دائمًا هذه العملية المنطقية على مستوى البتات، وليس شيئًا آخر — وهذه نقطة يخلط فيها كثيرون كما سنوضّح.

جدول الحقيقة: كيف تعمل NAND فعليًا

أوضح طريقة لفهم أي بوابة منطقية هي جدول الحقيقة (Truth Table). لبوابة NAND بمدخلَين A و B:

ABAND (A·B)NAND
0001
0101
1001
1110

لاحظ العمود الأخير: الناتج يكون 0 في سطر واحد فقط (عندما يكون A و B كلاهما 1). لذلك القاعدة العملية التي تحفظها بسهولة: NAND تُخرج 0 فقط إذا كانت جميع المداخل مُفعّلة، وتُخرج 1 في ما عدا ذلك. رياضيًا نكتبها: ‎NAND(A, B) = NOT(A AND B)‎.

لماذا تُوصف NAND بأنها «بوابة عامة»؟

هنا تكمن الأهمية الحقيقية لـ NAND في علوم الحاسوب، وهي النقطة التي غالبًا ما تُهمَلها الشروحات السطحية. تُعدّ NAND بوابة عامة (Universal Gate)، ما يعني أنك تستطيع بناء أي دالة منطقية أخرى — AND و OR و NOT و XOR — باستخدام بوابات NAND وحدها، دون الحاجة لأي نوع آخر.

هذه الخاصية ليست مجرد فضول أكاديمي؛ فهي سبب اعتماد المصانع تاريخيًا على NAND في تصنيع الرقائق: يكفي إتقان تصنيع نوع واحد من البوابات لبناء معالج كامل. وفي الجانب النظري، تربط هذه الفكرة بمفهوم «الاكتمال الوظيفي (Functional Completeness)» في المنطق البولياني، وهو أساس فهم كيف تُبنى الحوسبة كلها من لبنة واحدة بسيطة.

علاقة NAND بالخوارزميات وهياكل البيانات

قد تتساءل: ما دخل بوابة إلكترونية بالخوارزميات؟ العلاقة على مستويين:

  • مستوى المفهوم: الخوارزميات في النهاية تُنفَّذ على معالج مبني من ملايين هذه البوابات. فهم NAND يعني فهم الطبقة الأدنى التي تجري عليها كل عملية مقارنة أو شرط if تكتبه.
  • مستوى الكود المباشر: في أغلب لغات البرمجة توجد «عمليات على البتات (Bitwise Operations)» مثل & (AND) و | (OR) و ~ (NOT). لا توجد عادةً عملية NAND جاهزة، لكنك تُركّبها بسهولة: ‎~(a & b)‎. تُستخدم هذه الحيل في هياكل بيانات موفّرة للذاكرة مثل الخرائط البتية (Bitmaps) ومرشّح بلوم (Bloom Filter)، وفي خوارزميات الضغط والتشفير والأقنعة (Masks).

نصيحة عملية من واقع التطبيق: عند استخدام ~ في لغات مثل C أو Java انتبه إلى عرض النوع (8 أو 16 أو 32 بت)، لأن النفي يقلب كل بتات المتغيّر لا البت المنطقي وحده — وهذا مصدر أخطاء شائع عند محاكاة NAND يدويًا.

بوابة NAND أم ذاكرة NAND فلاش؟ لا تخلط بينهما

هذا أشهر التباس حول الكلمة، ويستحق التوضيح صراحةً لأن محرك البحث يخلط بين المعنيين:

الوجهبوابة NAND المنطقيةذاكرة NAND فلاش
ما هيعملية منطقية على البتاتنوع من ذاكرة التخزين
المجالالمنطق الرقمي والخوارزمياتالعتاد ووحدات التخزين
أين تجدهاداخل تصميم المعالجات والدوائرأقراص SSD وفلاشات USB وذاكرة الهواتف
ما يهمّك كمبرمجفهم المنطق والعمليات البتيةالسعة والسرعة والعمر الافتراضي

سُمّيت ذاكرة الفلاش «NAND» لأن خلاياها موصولة داخليًا بطريقة تشبه بنية بوابة NAND، لكنها موضوع منفصل تمامًا عن الخوارزميات. إن كان سؤالك عن الخوارزميات وهياكل البيانات، فالمقصود هو البوابة المنطقية لا التخزين.

كيف تبني بوابات أخرى باستخدام NAND فقط

لتلمس فكرة «البوابة العامة» عمليًا، إليك أبسط ثلاثة تركيبات:

  1. بوابة NOT: صِل مدخلَي NAND معًا بالإشارة نفسها. عندئذٍ ‎NAND(A, A) = NOT A‎.
  2. بوابة AND: مرّر خرج NAND عبر بوابة NOT (أي NAND أخرى موصولة كنافٍ). فـ AND هي ببساطة نفي NAND.
  3. بوابة OR: طبّق قانون دي مورغان — انفِ كل مدخل ثم مرّرهما إلى NAND: ‎OR(A, B) = NAND(NOT A, NOT B)‎.

هذه التمارين الثلاثة كافية لتقتنع بأن لبنة واحدة تكفي لبناء أي منطق، وهي فكرة محورية في أي مقرر لتصميم المنطق الرقمي.

الأسئلة الشائعة

هل NAND هي نفسها XOR أو NOR؟ لا. NOR هي نفي OR (تُخرج 1 فقط عندما تكون كل المداخل 0)، وXOR تُخرج 1 عندما يختلف المدخلان. أما NAND فتُخرج 0 فقط عندما تكون كل المداخل 1.

هل توجد عملية NAND جاهزة في لغات البرمجة؟ غالبًا لا. تُركّبها بنفسك عبر ‎~(a & b)‎، وهذا كافٍ تمامًا لأي حاجة عملية.

لماذا يهتم مطوّر البرمجيات بشيء يبدو خاصًا بالإلكترونيات؟ لأن فهم البوابات يوضّح كيف تتحوّل شروطك وحلقاتك إلى تعليمات فعلية على المعالج، ويجعل العمليات البتية في هياكل البيانات المتقدمة أوضح بكثير.

هل NAND مرتبطة بذاكرة هاتفي أو قرص SSD؟ الاسم مشترك فقط. تخزين هاتفك يستخدم «NAND فلاش»، وهو موضوع عتادي منفصل عن البوابة المنطقية التي نتحدث عنها في الخوارزميات.