طيب، بسم الله الرحمن الرحيم، اليوم إن شاء الله
هنستكمل المثال الذي ختمنا به المحاضرة السابقة، و
الذي هو خاصة بموضوع الـ state reduction، طبعاً زي ما
أنتم شايفين، احنا في المحاضرة السابقة بدأنا نشتغل في
هذا المثال، في عندي state diagram من الـ state
diagram، حصلنا على هذا الـ state table، والمشكلة التي
في الـ state table أنه في، أنا عندي هنا مجاهيل
وبالتالي كيف أنا بدي أتعامل مع السؤال الذي فيه
مجاهيل أو missing values؟ طبعاً، علشان أنا أقدر أتعامل
مع هذا السؤال، قلنا في طريقة ألف، وهي طريقة
طويلة، بدنا نشيء أنها أجرب كل الاحتمالات الممكنة،
أحل هذا السؤال أكثر من مرة، وفي الآخر آخذ أفضل حل
بس هنا للأسف في عندنا 2 أس 6 = 64 احتمال، فمش معقول
بدي أحل السؤال 64 مرة.. sorry، 64 مرة، وبعد ما
أحله 64 مرة، آخذ الأفضل، فقلنا بدنا نشوف طريقة
systematic أفضل، وأسرع، وهي طريقة الـ
implication table، التي هي طريقة الدرج التي اشتغلنا
عليها المرة السابقة، والآن إن شاء الله بدنا نعمل
الدرج من جديد، ونحاول نستكمل المثال بالكامل، علشان
نعمل الدرج، زي ما أنتم عارفين، افترضنا أنه بدنا
نبدأ على طول زي هيك، بدنا نبدأ، بدنا نسيب الـ S0،
ونبدأ من S1، بعدين بدنا نكمل بنفس الطريقة، نحط S2، و
بعدين بنفس الطريقة بنحط S3، وآخر واحدة بنحطها التي
هي S4، وبذلك نكون خلصنا هذا الدرج، فخلينا نمسح
الآن الزيادات التي هنا، تمام؟ وبدنا الآن نضيف الـ S
node من الأول، S node، S1، S2، S3، وأتوقع طريقة الدرج
الآن صارت سهلة، كل المطلوب أنه نعمل مقارنة، هل الـ S
node ممكن تكون equivalent أو compatible مع S1، ممكن
ولا لا؟ عشان أعرف، ببدأ أطلع على الـ state table، وأقرر
إذا وجدت الـ outputs مختلفين، أكيد ببدأ أحط X، أن هذا
لا يمكن، لكن إذا وجدت الـ outputs زي بعض، الآن أحط
الشروط، زي ما اشتغلنا المرة السابقة، على سبيل المثال
بين S node و S1، حكينا المرة السابقة، هيبدأ، أقارن S
node، وببدأ أقارنه مع S1، أول شيء، طالما مش محطوطة الـ
outputs، فما عندي أي إشكالية، ما عندي أي عائق من الـ
outputs، على طول هشتغل، وأقول ماشي، S0 تشابه S1، أو
compatible مع S1، إذا كانت S1 تشابه S3، أو
compatible مع S3، أو equivalent مع S3، أو إذا كانت
S2 مع S4، وهكذا بدنا نكمل، الآن زي ما عملنا S1 و S2،
سنعيد S1 مع S2،
S1 مع S2، الـ Outputs ما فيش مشاكل، بس بدنا S1 تشابه S4،
وهنا لأنها هذه فراغ، خلاص، ممكن أعتبرها S2، وبالتالي
S2 مع S2 لا تُكتب، لأنها نفسها، زي ما حكينا المرة
اللي فاتت، وبالتالي هكتفي بالشرط S1 إلى S4، ومش هسجل
هذه، لأن أنا بأفترضها زي ما بدي، وبالتالي ممكن
أعتبرها S2، ويصير S2 مع S2، وما بكتبهاش لأنها نفسها،
أكمل الآن بنفس الطريقة، S0 مع S3، هذه S3، عشان
ما نخربطش،
طالما هنا ما فيش output، معناه ما فيش مشاكل، بأعتبرهم
الـ output زي ما بدي، إذا ما في مشاكل، ما في X مباشرة،
على طول بدنا نقول S node و S واحد، و S node و S اتنين، و
S1 و S0، و S2، وزي ما قلنا المرة اللي فاتت، الترتيب
مش مهم، يعني لو أنا جلبت S1 و S0، S0 و S1، معنى نفس
الفكرة، أن هذين الاثنين لازم يكونوا متشابهين، أو
compatible، أو equivalent، حتى أنا أقدر أكمل بدون أي
مشاكل، طيب، الآن آخر واحدة، الـ S0 مع مين؟ مع S4، بنفس
الفكرة، وهذا حاله آخر محاضرة السابقة، S0 يكون شبه
S1،
وعندنا S0 يكون شبه S2، تمام، الآن خلصنا من مقارنات الـ
S0، هننزل، نعيد الشغل، ونقارن الباقين، عشان نعبي هذا
الدرج، ببدأ أقارن S1 مع S2، أو S3، أو S4، علشان هيك ببدأ
نقارن هذه مع كل ما تحته، وأبدأ بـ S2، هذه S2،
لو جئنا نتطلع، هتقول لي لازم تكون طبعاً الـ outputs
مافيش فيهم مشاكل، إذا هنقول S3 تكون زي S4، هذه S3،
تكون مثل S4، وهنا لأنه فرق، خلاص بأعتبر S4 تكون زي
S4، بأفترضها زي ما بدي، وبالتالي ما في داعي أحط S4 مع
S4، وبذلك نكون خلصنا مقارنة S1 مع S2، الآن نكمل،
بدنا S1 مع مين؟ بنفس الطريقة، مع S ثلاثة، الـ outputs
ما فيش مشاكل، طول ما هذان missing، missing، معناه
ما عندي مشكلة، أنا أقدر أعتبرهم زي ما بدي، فما في
مشكلة، ما في خوف من الـ outputs، ما أحط الـ X على طول،
بسيّر أقول بس الشروط، S node مع S ثلاثة، وعندي
S node مع S أربعة، الآن
نكمل، S واحد نقارنها مع S4، الـ Out ما فيه مشاكل،
S0 بدها تكون زي S3، و
S0 بتكون زي S4،
طبعاً لحظة، أنه لحد الآن أنا مش عارف إنهم فعلياً زي
بعض، ولا لا، compatible ولا لا، لكن أنا جاعل بسجل
الشروط، يعني أنا بقول، عشان S1 تكون compatible مع S4،
لازم يتحقق الشرط هذا، ويتحقق الشرط هذا، فأنا جاعل بس
بسجل الشروط، لكن بعد شوية هنروح نحط الـ Xات، إيش يعني
Xات؟ زي ما اتفقنا المرة اللي فاتت، أن الشرط غير
متحقق، وبالتالي هذه مش compatible مع هذه، أو هذه مش
equivalent مع هذه، فهي طريقة الدرج هيك باختصار،
فلازم أحط الشروط في الأول، وبعدين أفحص مدى قابلية
تحققهم من عدمه، الآن بنفس الآلية، خلصنا من S1، هنرجع
نقارن S2 مع S3، ومع S4، فهنمسح هنا كمان مرة، وهنقول
بدنا نقارن الآن S2، هذه، مع S3، تمام، الآن الـ output
ما فيش فيه أي اعتراضات، الـ output ما فيه أي مشاكل،
لكن الشروط S0 مع S4،
والشرط الثاني، لأن هنا فراغ، ممكن أعتبرها S node في
الحالة هذه، S node مع S node لا تُكتب، فدائماً لما
بشوف فراغ، بسجلش الشرط، خلاص، لأنه أدم ريحني الفراغ
الموجود، وبالتالي بقى أسيبها، الآن بدنا نعمل S2 مع
S4، هنمسح S3 لأنه خلصنا منها، ونحط هنا عند S4، ونقارن،
لاحظوا هنا فراغات، يبقى الـ output ما فيه أي مشاكل،
إذا بدي S node تكون شبه الـ S4،
وهنا نفس الفكرة، طالما في عندي فراغ مش موجود، إذا
ما عندي أي إعاقة، ببساطة بأفترضها S node، S node مع S
node، فما في داعي أكتبها، لأن S node هي نفسها S node، زي ما
شفنا المرة السابقة، إذا الآن خلصنا لغاية هنا، الآن
ضل عليّ في الجدول، أعمل S3 مع S4، بدي أقارنهم، هذه S3،
وهذه،
S4، الآن إيش بنلاحظ؟ لاحظوا أن الـ output هنا
محدد، مش أنه مجهول وأنا أقدر أفترضه زي ما بدي، محدد
1 0، وهنا محدد 0 1، وبنلاحظ أنهم مختلفين عن بعض، و
طالما مختلفين عن بعض، على طول بأحط الشروط، بأحط X، هذا
الـ X معناته شو؟ أن S3 و S4 مستحيل يكونوا
compatible مع بعض، مستحيل يكونوا equivalent، ليش
مستحيل؟ لأن الـ output لـ S3 يختلف عن الـ output لـ S4،
إذا، على طول بنحط الـ X مباشرة بدون أي إشكالية، الآن
بدنا، بعد ما خلصنا الـ implication table، وعملناها،
إيش قلنا المرة الفاتت؟ بدنا نسوي؟ بدي أبدأ في
موضوع التشطيب، زي ما اشتغلنا، بدي أبدأ من الأول، أشوف
كل شرط، وأعمل الـ round تبعتي، وأشطب، إذا شطبت، بدي
أعيد الـ round كمان مرة، إذا فيها تشطيب، أعيد كمان
مرة، لغاية ما بطل ألاقي تشطيب، بعد ما بطل ألاقي
تشطيب، باخذ النتائج الأخيرة تبعتي، الآن تعالوا نبدأ
نشوف موضوع التشطيب، نبدأ من الأول، أول شيء بقوله
الشرط S1 مع S3، بدي أجي أدور وين S1، وين S3؟ هذه
مربع S1، وهذه S3، مش مشطوب، طالما مش مشطوب، بسيبه، خلصنا،
أكمل، S2 مع S4، وين S2 مع S4؟ هذه S2 مع S4، مش مشطوب،
بسيبه، أمشي للي وراه، S2، بدنا S1 مع S4، وين S1 مع S4؟
هذه S1 مع S4، مش مشطوب، بسيبه، أمشي للي وراه، S0 مع S1،
هذه S0 مع S1، مش مشطوب، بسيبه، S0 مع S2، مش مشطوب، بسيبه،
لاحظوا لحد الآن أنا ماشي طبيعي، ما فيش أي شطب، الآن
أكمل، S0 مع S4، عشان أكمل، S0 مع S1، وينها؟ هذه S0، وهي
S1، مش مشطبة، بسيبها، في S0 مع S2، هذه S0 مع S2، مش
مشطبة، بسيبها، الآن أكمل بالترتيب، وصلت لهنا، S3 مع S4،
وين هذه S3؟ آه، هذه S3 مع S4، X، إذا على طول آجي على
المربع، عشان بقول، أشطبها، خلاص، مشطوب، ولازم أكمل للاخر
وأعيد كمان مرة موضوع التشطيب، لأن طالما صار فيه
تشطيب، ولو لمرة، وأنا ماشي، لازم أعيد كمان مرة، عشان
أتأكد أن ما فيش تشطيبات إضافية، على كل حال، هنكمل
بنفس الطريقة، S0-3، هذه S0-3، ما فيش شيء مشطوب، S0-4، S0-4،
ما فيش شيء مشطوب، سبت المربع هذا، نزلت للمربع الذي
وراها، الـ 0 مع S3، الـ 0 مع S3، ما فيش تشطيب، الـ 0
مع S4، الـ 0 مع S4، ما فيش تشطيب، لحد الآن ما فيش
مشاكل، مشينا هنا، الـ 0 مع S4، هذه الـ 0 مع S4،
ما فيش تشطيب، نزلنا هنا، الـ 0 مع S4، ما فيش تشطيب،
آخر واحدة مشطوبة، هيك خلصت الـ Round الأولى، طالما خلصت
الـ Round الأولى، وكان فيها تشطيب، ولو لمرة واحدة،
أنا مضطر أعيد من الأول ثاني، لأن يمكن التشطيب الذي
أنا عملته، يخليني أشطب مربعات في الأول، أنا
ما فحصتهاش، عشان هيك، هي الفكرة تبعتها، أن أي تشطيب
بيكون موجود، أروح أعيد ثاني، وأعمل الـ Round من الأول
للاخر، إذا ما صار فيه أي تشطيب، معناه خلاص، بأخذ
النتائج، اللي كمان شوية هنتكلم كيف نأخذ هذه النتائج،
الآن تعالوا نكمل بنفس الطريقة، نعيد طبعاً S1 مع S3،
هذه S1 مع S3، ما فيش تشطيب، سبتها، S2 مع S4، S2 مع S4، ما فيش
تشطيب، سبت المربع الأول، مشيت للي وراه، S1 مع S4،
هذه S1 مع S4، ما فيش تشطيب، مشيت على المربع هذا، S0 مع
S1، هذه S0 مع S1، سبتها، S0 مع S2، هذه S0 مع S2، التي
ما فيش تشطيب، سبت المربع الثالث، S0 مع S1، هي S0 مع S1،
ما فيش تشطيب، S0 مع S2، هي S0 مع S2، ما فيش تشطيب، خلص من
المربع هذا، لحد الآن ما فيش ولا تشطيب في المربعات
الأربعة هذه، الآن أكمل بنفس الطريقة، هذا مشطوب، خلصنا
منه، نكمل للي وراه، S1 مع S3، لنشوف، نبحث مربعات هذه،
S0 مع S3، هي S0 مع S3، ما فيش تشطيب، S node مع S أربعة،
ما فيش تشطيب، S
و S4 برضه compatible states إذا لاحظوا طبعا هذا
ليش ما أخذتو S3 و S4؟ لأنه مش متطابق. طيب أنا إيش اللي
سجلتها؟ إن أنا سجلت كل الـ states المتوافقة، و كمان
مرة ما فينا ننسى المعلومة دي، مهمة. لو كانت هذه الـ
values من الأساس موجودة، كنت هأقول هذا كله عبارة عن
الـ equivalent states، لكن أنا الآن ما قُلتش
equivalent states، و صرت أسميهم compatible، لأنه كان
فيه values في الأساس مش موجودة، لسه فيه step هتضاف
زيادة على الـ compatible states، عشان نقدر نحصل على
الـ state reduction. ما ننساش الهدف من شغلنا هذا.
الهدف من شغلنا هذا إنه نعمل state reduction، إنه
نبسط الدوائر، إنه الـ states اللي شبه بعض نلغيهم، و
نخلي واحدة عنهم. زمان لما كان هذا كله موجود، كان عندي
simple match سهل، كان عندي درج بتعطيني الـ equivalent
states، و كانت بتخلص الموضوع بسهولة. الآن لأ، صار هدول
فراغات هذا، و داني على موضوع حاجة اسمها compatible
states، و لسه فيه step زيادة بنعملها الآن في سبيل
تبسيط الـ state table، و نخليه أصغر، عشان الـ state
diagram تبعنا اللي بنوصله يكون أصغر من السابق،
و بالتالي الـ hardware أو الـ sequential circuit اللي
بنوصله مالها تكون برضه أصغر و أسرع و efficient. طيب،
الآن إيش الخطوة اللي بعد هيك؟ إذا اتفقنا الآن إن كل
المربعات اللي ما عليهاش Xات أعطتني الـ compatibility
it's not compatible مع S1، it's not compatible مع
S2، و هكذا لكل المعلومات اللي حصلت من هنا. طيب، السؤال
الآن إيش بدي أعمل؟ يعني بعد معرفة الـ Compatibility
Set، إيش الخطوة التالية؟ الخطوة التالية الآن بدنا
نحاول نكبر مجموعات الـ Compatibility. و بدل ما
فيها بس اتنين، بدنا نحاول نكبرها يصير فيها تلاتات، بس
بشرط إن التلاتة اللي جواتها يكونوا كلهم compatible
مع بعض. يعني بمعنى... بمعنى، هل بنفع أقول الـ S Node
مثلا، و الـ S3، و الـ S4 هي من تلاتة، بنفع أقول هذه
compatible؟ هأقول: ما بنفعش. ليش؟ لأن S3 و S4 مش
compatible. S3 و S4 مش compatible. كيف أنت حاطط
اتنين states مع بعض مش compatible؟ هذا غلط، هذا
مستحيل. حتى لو كانت S node compatible مع S3، حتى لو
كانت S node compatible مع S4، لكن طالما S3 و S4 مش
compatible، ممنوع أحطهم في مجموعة. إذا أنا الـ target
تبعي الآن بدي أحاول أحط تلاتة states جوا المجموعة،
بحيث كلهم compatible مع بعض، و لا واحدة تكون X مع
التانية. إذا... إذا لجأت لهذه المجموعة، معناه أنا
قاعد بزيد الـ compatibility من اتنين لتلاتة.
طيب، كيف بدي أقدر أسوي هذا بشكل systematic، و أحصل
على كل المجموعات؟ تعالوا نشوف. الآن إيش هأعمل أنا؟
هأحاول أدمج هي مع هي، أشوفها بتظبط ولا لأ. بعدين هي
مع هي، بعدين هي مع هي، و بعدين هي مع الجميع، و أشوفها
بتظبط ولا ما بتظبطش. و بعدين أعيد هي مع الباقي، بعدين
هي مع الباقي، و هكذا لغاية ما أشكل كل المجموعات
الممكنة اللي من تلاتة، و كلهم compatible مع بعض. طبعا
أنا مش بالضرورة أمشي هيك systematic، أنا ممكن أقول:
فكروا لي مع بعض، حاولوا توزعوا لي الـ S node، و الـ S1، و
الـ S2، و الـ S3، و الـ S4. حاولوا توزعوا لي إياهم تلاتات بحيث
إن كل تلاتة في مجموعة يكونوا كلهم compatible مع
بعض، بناء على القاعدة اللي أنا حصلت عليها. أنا ممكن
أسأل زي هيك، و البعض يصير يجرب و يطلع لي كل المجموعات،
لكن عشان احنا ما ننساش و ما نغلطش، ممكن نمشي بشكل
systematic، لأن هذا هو الأساس اللي أنا لازم أحافظ
عليه. طيب، كيف systematic؟ يعني أنا أديكم مثال صغير،
أقول: بدي أجرب أدمج المجموعتين هدول مع بعض. إيش
يعني؟ يعني أدمج S0 مع S1 مع S2. مش هيك؟ لأن هذه S node
هيها، S1 هيها، S node هيها، S2 هيها. من التنتين هدول
طلعوا التلاتة هدول. الآن بسأل نفسي سؤال: هل هدول كلهم
compatible مع بعض ولا لأ؟ يعني هل الـ S node
compatible مع S1؟ هل الـ S node compatible مع S2؟ هل
الـ S1 compatible مع S2؟ إذا لجأت كلهم compatible
مع بعض، خلاص بخليها، و بقول هي أول مجموعة من تلاتة
compatible مع بعض. إذا لجأت أي واحدة جواتهم ما بتظبطش،
بشطب المجموعة هذه، و بعدها ما أتعاملش معاها. احنا عشان نسهل
الموضوع شوية، احنا ملاحظين إن كل النقاط، كل الـ
states مع بعضهم كلهم compatible، باستثناء الـ S3 و
S4. ما بيركبواش مع بعض. ما تنساش S3 و S4 ممنوع ييجوا في
مجموعة مع بعض، و ممنوع الـ S1 و S2 برضه ييجوا مع بعض.
يعني إذا لجأت في المجموعة أنا S1 و S2 في نفس
المجموعة، هذه غلط، ما بتنفعش، لأن أنا عارف الآن إن
S1 و S2 عمرهم ما كانوا compatible. عشان أريح حالي،
و نفس الفكرة S3 و S4 ممنوع ييجوا في نفس المجموعة،
لأن إذا جابوا في نفس المجموعة، معناها برضه غلط.
احنا شروطنا إيش بتقول؟ إن الـ states اللي جوا
المجموعة يكونوا كلهم compatible مع بعض. إذا واحدة مش
compatible مع التانية، هذه غلط، المجموعة بتتشكلش.
من تلاتة، بلغيها. فأنا الشطارة الآن، إيش التلاتات
اللي ممكن أخذهم مع بعض؟ كل الاحتمالات اللي ممكن
أخدهم تلاتات مع بعض، بحيث إن اللي جوا يكونوا
compatible مع بعض، ما تكونش واحدة ممنوعة، يعني
ما يكونش الـ S1 مع S2، ما يكونوش جوا المجموعة، ولا S3
مع S4. و بالتالي أكيد لما حاولت أدمج هذه مع هذه، الكل
هيقول لي: هذه مجموعة خاطئة. ليش؟ لأن كيف S1 و S2 مش
compatible؟ هاي S1 و S2 مش compatible، هاي إذا هاي
مش هتطلع لي مجموعة. طيب، يلا نجرب هاي مع اللي وراها،
يعني بدنا نقول مثلا S0 مع S1 مع S3. هي الـ S node هيها،
الـ S1 هيها، و الـ S3 هيها. تعالوا نشوف، اه ولا لأ. فيها
S1 مع S2، ولا فيها S3 مع S4؟ إذا على طول هذه بالنسبة
لي تعتبر هي أول مجموعة من تلاتة ما فيهاش مشاكل،
فلازم هذه أسجلها، ما أضيعهاش. هي عندي S node مع S1 مع
S3، هي أول مجموعة compatible بدون أي مشاكل من تلاتة.
الآن بدأت أعمل discover. لما جئت للمجموعات، بدي أكمل
بنفس الطريقة. كيف بدي أكمل؟ بنفس الطريقة. الآن برجع
أقارن هاي كمان مرة، اللي هي الـ S node و الـ S1. ما
عملت هذا، أقارنها مع هاي اللي أنا ما خلصتهاش، اللي هي
هنضيف عليها S4. لأن الـ S node موجودة. طالما هذه
المجموعة ما فيهاش لا S3 مع S4، ولا فيها واحد مع
اتنين. إذا بالنسبة لي أيضا هذه مالها؟ تعتبر كمجموعة
compatible من تلاتة. إذا حاجة أقول فيها: لجأت كمان
مجموعة compatible من تلاتة، اللي هي S0 S1 S4. الآن
بدأنا نكمل بنفس الطريقة. بدأنا نرجع للـ S0 و للـ S1 و
أجربها مع مين؟ بدأنا نجرب نجمعها مع هذه. هادي فيها S1
هي موجودة، و فيها S3. هل هذه compatible ولا لأ؟ طالما
ما فيهاش واحد مع اتنين، و ما فيهاش تلاتة مع أربعة،
إذا برضه هذه بالنسبة لي مجموعة تالتة، تصلح أن تكون
compatible من تلاتة states، و بجي بسجلها هان، اللي
هي S0 S1. طبعا... طبعا هي موجودة. طالما موجودة
بكررهاش. هي شايفينها S0 S1 S3، هي مكتوبة خلاص. طالما
مكتوبة، بكررهاش. خلاص هي معتمدة و موجودة، خلاص ما بكتبهاش
كمان مرة، لأنها موجودة. بكمل الآن. الآن هنعيد S0 to
S1 مع S4. هيها برضه موجودة. S0 to S1 مع S4. بكمل. S0
to S1، S0 to S1، S2، S3. أكيد هتقول لي: هذه مرفوضة، لأن
واحد و اتنين بيجيوش مع بعض. إذا هذه و هذه مش
هتجيب لي شيء جديد. بنفس الطريقة S node و S1 و S2 و S4.
إيش رأيكم في هذه؟ S0 و S1 برضه مش هيظبط، لأن S1 و S2
ما بيركبواش مع بعض. إذا هذه المجموعة مستحيلة. إذا أنا
إيش سويت لحتى الآن؟ قارنت هاي مع الكل، و طلعت التلاتات
الممكنة. الآن بنفس الطريقة، هأعيد إيش؟ هأعيد. همسك، أقارن
هاي مع الكل، بعدين أقارن هاي مع الكل، و أسجل كل
المجموعات اللي ممكن يطلعوا معايا من تلاتة. خليني
بنفس الطريقة أشتغل. خليني أمسح هادي، و أكمل نفس الفكرة.
خلاص فحصنا الأولى. الآن إيش هنعمل؟ هنروح نقارن هاي
مع هاي، على السريع الآن.
S2، S3. ما فيش فيهم واحد مع اتنين، ما فيش فيهم تلاتة مع
أربعة. إذا هذه مجموعة كويسة، اللي هي S0، S2، S3. هل هي
موجودة عندي هنا؟ لأ. S0، S2، S3، لأ. إذا هأضيفها ضمن
مجموعاتي. هذه صار عندي لحد الآن تلات مجموعات. S0 و S2
و S3. لا هي هي، ولا هي هي، ولا هي هي. بكمل. هذه مع هذه.
S0، S2، S4. S node، S2، S4. موجودة. S node، S... مش موجودة. و ما فيش
فيها تلاتة و أربعة، و ما فيش واحد، اتنين. إذا هأضيفها
كمان للمجموعة الرابعة، اللي هي S node، S2،
S4. تمام؟ ما فيش مشاكل. هيها S0 مع S2، انضيف عليها الـ
S0، ما هي نفسها. انضيف عليها الـ S4، فصارت المجموعة
اللي من تلاتة S0، S2، S4. و طالما الـ S0 و S2 و S4
ما فيش فيهم واحد مع اتنين، ما فيش فيهم تلاتة مع أربعة،
إذا هذه تعتمد عندي، و طالما مش شايفها أنا قبل هيك،
بضيفها. لو أنا شايفها قبل هيك، خلاص بسيبها. أنا بدي
أجيب المجموعات المختلفة اللي من تلاتة. طيب، الآن
نكمل بنفس الطريقة من هنا. مثلا هذه مع هذه، هتقولوا لي:
ما بتظبطش، لأنه بيجي الواحد و الاتنين مع بعض، و هذا
ممنوع. طيب، هذه مع هذه، هتقولوا لي: برضه بيجي الواحد
و الاتنين مع بعض، ما بتظبطش. هذه مع هذه، اللي هي S node،
S2، S3. اه، هذه بتنفع، بس مسجلة. هيها S node، S2، S3،
مسجلة. الآن بنكمل. S0، S3، S2، S4. هتقولوا: ما بتنفعش، لأن S3 و
S4 بييجوا مع بعض، و S3 و S4 ممنوع ييجوا مع بعض. و
بنفس الطريقة هنقارن انهي مع الباقي... هنقارن انهي مع
الباقي... هنلاقي فقط اللي هيطلع معانا، عشان نختصر
الوقت بس، الأربع مجموعات هدول. مش غير. لكن أنتو
تجربوا طبعا. فيه ناس شاطرين ممكن يوصلوا للنتيجة بدون
ما يتعب حاله، يمشي systematic. يعني بالتفكير، أنا
عندي S node، و عندي S1، و عندي S2، و عندي S3، و عندي S4. طيب،
ما هيش المطلوب؟ المطلوب أعمل تلاتات منهم، بحيث 1 و 2
ما يكونوش جوا المجموعة، و 3 و 4 ما يكونوش جوا
المجموعة. فبتقدر بسهولة تعملها، تقول: اه والله بدي 0
مع 1 و 3، عشان ما يكونش 2. 0 مع 1
مرفوضة، ليش؟ لأنه اجتمع فيها ثلاثة مع أربعة، وهذا
ممنوع، احنا قلنا ممنوع الواحد مع اثنين وممنوع
الثلاثة مع أربعة، ماننساش القاعدة هذه من الدرجة
اللي حصلناها، وبالتالي، أدمج الأول مع الرابع
مستحيل، لأنه هيجتمعوا ثلاثة مع أربعة، وهذول مش
compatible، إذا المجموعة غلط، نفس الفكرة، لو أخدت
هادي مع هادي، هيجتمع S0 وS1 وS4 وS2 وS3 حيصيرهم
خمسة وهذا مستحيل لأن فيها ثلاثة وأربعة ممنوع و
فيها واحد واثنين ممنوع إذا مايصير أجمع هادي مع
هادي ولا هادي مع هادي تعالي هادي مع الأخيرة مثلا
S0 S1 S4 S2 S0 مازادتش خليني أكتب الآن هذي مهمة S0
S1 S4 انضاف عليها إيش؟ S node موجودة S4 موجودة انضاف
عليها S2 ليش دي برضه غلط لأن فيها S1 مع S2
الخلاصة أنه لو جربت تدمج مين ما تدمج هتلاقي ولا
يمكن تحصل على مجموعة من أربعة ما فيهاش واحد مع اثنين
أو ما فيهاش ثلاثة مع أربعة، إذن مستحيلة إذا أنت
لازم توصل لهذه المعلومة إما بالتجريب زي ما عملت أو
حتى بالعقل، بالدماغ، يعني أنا عندي غيرهم S0 و
S1 وS2 وS3 وS4، ما فيش غيرهم وبدي أعمل أربعات و
ممنوع يكون واحد مع اثنين وممنوع يكون ثلاثة مع
أربعة، مستحيل لأن طالما أنت خدت أربعة يا بوجع واحد
مع اثنين في المجموعة يا بتلاقي ثلاثة مع أربعة إذا
مستحيلة تمام؟ إذا من هنا احنا بنقول إنه خلاص كل ال
compatibility groups اللي عندي أقصى حاجة بوصلها
اللي هم الثلاثات طب أنا خلصت ليلة وما خلصتش لسه في
step الرابعة فاحنا خلينا عشان ما نخبطش نتذكر إيش
الـstep بالأساسيات أول step بعمل الدرج من الدرج
اللي مش مشطوب بيعطيك كل الـcompatibility groups
اللي من اثنينات طب شو أعمل بعد هيك؟ أحاول أشكل
compatibility groups من ثلاثات طب بعد هيك أحاول
أشكل من أربعات أشكل من خمسات بضلّك ماشي لغاية أقصى
إيش أنت بتوصله عشان تبدأ الخطوة الأخيرة، الآن أنا
في المثال اللي أنا شغاله أقصى شيء أنا بوصله واضح
أنه بس ثلاثات، ما فيش أربعات، خلاص، أنا بس عندي هاي
وهاي وهاي وهاي، لما بدأت في مشروع الأربعات،
ما طلعتش ولا مجموعة، إذا إيش بدي أسوي الآن ده؟
أشتغل الخطوة الأخيرة على الثلاثات، شو الخطوة
الأخيرة؟ هتكلم عنها الآن، طب السؤال، لو جدلاً طلع
معايا أربعات، ممتاز وطلع من الأربعات حشط بكل
الثلاثات وأحط الأربعات وأفكر هل بقدر أعمل منهم
خمسات ولا لأ؟ إذا ما بقدرش أعمل خمسات خلاص هشتغل
على الأربعات وهكذا بنضلّنا ماشيين لأقصى عدد من
المجموعات اللي ممكن أنا أحصلها في مثلي هذا كمان
مرة أنا أقصى مجموعات حصلتها من ثلاثات ما فيش أربعات
إذن نوقف على هنا، طب شو أعمل؟ الآن نشوف الخطوة
الأخيرة، كيبنا نشتغل عشان نعمل الـreduction النهائي
وهنا هشتغل على الثلاثات هنا بس عشان نقدر نشوف و
أنا بخربش نشوف صح بدي أسيل هاي وأحط صفحة بيضاء
عشان نعرف نخربش بدون مشاكل طيب .. الآن تعال نشوف
كيف نشتغل وراجعوا معانا هنا أول شيء بدي أعمل جدول
الآن هذه بدي أسميها اللي هي الـS node S1 S3
هذه المجموعة بدي أسميها state A بدي أسميها state A
طيب شو المطلوب في هذه الـstate A؟ إيش عمل فيها؟
بدي أعرف في هذه الـstate A وين بدها تروح عند X=0
و أين بدها تروح عند X=1 وهنشوف كيف
نعرف هذا الكلام تمام مش بس هيك وبدي أشوف الـ
output إيش بده يكون عند X=0 وإيش بده يكون
عند X=1 طيب بده نعرف كيف نسوي هذا الكلام
كمان مرة هي المجموعة الأولى سميتها أنا A ممكن
تسميها أي اسم لكن أنا افترضتها لأنها الأولى بدي
أسميها A الآن إيش بدي أسوي؟ بدي أشوف عند X=0
هذه الـA وين بدها تروح وإيش بدها تطلع كـoutput
وعند X=1 وين بدها تروح وإيش تطلع كـoutput؟ طب
من وين أجيب معلوماتي؟ كيف أعرف؟ لازم أرجع للـstate
table اللي أنا بدأت أشتغل عليه الدرج الأساسي
تعالوا نشوفه وين، هيو خلينا نطلعه عشان نقدر نكمل
اللي هو هذا الـtable
اللي هو هذا الـtable وأنا خاطري إني أديك مثال
عليه بس في الأول اللي طلعليه هنا على اللوح كيف
بدنا نعرف؟ الآن عشان نعرف عند X=0 وأين بده
أروح بدي أفحص الـS node وأين بتروح وبدي أفحص الـ
S1 وأين بتروح؟ انتبهوا، بتبحث عند 0 وأين بيروحوا
والـS3 وأين بتروح عند 0؟ وأسجل المعلومات عندي
تعالوا نشوف كيف طلعولي الآن على رسمة الكتاب هاي
الـS0 هاي اللي معلم عليها الـS0 تمام عند X=0 وين
راحت؟ عند X=0 راحت على S1 بدي أسجل هذه المعلومة الـS
node عند S0 راحت على S1 وما فيش عندي output شايفين
ما فيش عندي output تمام؟ هاد الآن طلع اللوح إذا أنا
عند الـS0 إيش بدي أكتب؟ راحت على S1 وما فيش عندي
output هعمل نفس الكلام نطلع كمان مرة على S1 وين
راحت وإيش طلعت output خليك معايا في الكتاب اتطلع
الآن على S1 الـS1 عند 0 وين راح؟ S3 مظبوط؟ بدي
أسجل S3 على اللوح زي ما عملنا هاي الـS1 راحت على
S3 وإيش الـoutput؟ لسه ما فيش output، فراغ بدي أكمل
بنفس الطريقة، الآن مين ضايل عندي في المجموعة؟ S3
وين راحت الـS3؟ اتطلع على الـS3، دوّر عليها جوا
الجدول، هيها الـS3 تمام؟ وين راحت عند الـX=0؟
سجل راحت عند S node والـoutput شو؟ 1
سجلها على اللوح زي ما عملنا راحت عند الـS node و
الـoutput 1 الآن كيف بتاخدوا الخلاصة من هدول؟
الخلاصة كيف تنحسب الآن الـS node هاي والـS1 هاي و
الـS3 هاي وين هم موجودة فوق ولا لأ؟ هتقولي اه موجودة
هي S node وS1 وS3 هتلاقي أنا سميتها إيش قبل شوية؟
سميتها A، إذا هذه المجموعة اللي أنا بقدر أحلها
فعلياً اسمها A، فأنا حاجة أقول هنا .. طلعوا هنا
..ها.. بدي أجي أقول بدها تروح على A، لو أنا
كنت في A، اللي هي الـ0 1 3 وأجي 0
الحسبة اللي حسبتها بتوديني برضه على الـ0 1
3 اللي هي نفسها فبروح بقوله على طول إذا أنا
بده أروح على A طب الآن الـoutput شو؟ الـoutput
اتطلعوا معايا فراغ مع فراغ مع 1 إذا الـoutput
على طول هو 1 إذا حاجة أسجل في المنطقة هذه 1
شايفين كيف؟ إذا أنا كمان مرة اتطلعوا معلش على
الكتاب كمان مرة أنا المجموعة A كانت مكونة من S
node وكانت مكونة من S1 وكانت مكونة من S3 فأنا
روحت اشتغلت بالتفصيل واحدة واحدة مسكت الـS node
..مسكت الـS node عند الـ0 وان راحت..راحت على S1
..روحت سجلت المعلومة والـoutput فراغ سجلت
المعلومة والـS1 راحت عند الـ0 عند S3 روحت سجلت
المعلومة والـoutput فراغ سجلت المعلومة بعدين روحت
على S3 وشفت عند 0 و راحت راحت على S0 سجلت
المعلومة والـoutput 1 وهاي المعلومات سجلتهم
هنا زي ما شفته قبل شوية طب أنا ليش اخترت S0 وS1 و
S3 مش غيرهم؟ لأن أنا شغال على A أنا شغال على A
هذه سميتها A A بتتكون من node و1 و3 وبالتالي
عشان أعرف A وأين بدها تروح لازم أفحص هاي وأفحص
هاي وأفحص هاي ما ليش داعي في غيرهم نتيجة فحص
الثلاثة ودوني على نفس الاسم S node S1 S3 طب ما
احنا متفقين أن الـS node وS1 وS3 اسمها A
وبالتالي أنا إيش بروح بكتب؟ بكتب اسم اللي جيت له اللي
هي A طب الـoutput كيف أحسبه؟ مش أنا حسبت الـoutput
بتاع الـS node وحسبت الـoutput بتاع S1 وحسبت
الـoutput على الثلاثة الآن فراغ مع فراغ مع 1
بسجل 1 طبعاً اطمئنوا مستحيل يطلع 1 مع 0 ممكن
يطلع أصفار كلهم، يطلع واحدات كلهم أو فراغات مع 1
أو فراغات مع 0، مش هيكون فيه تضارب، تمام؟ إذن،
هيطلع الجواب عندي 1 طب أنا إيش اللي سويته لحد ال
لحظة دي؟ ركّزوا، أنا بس سويت حاجة واحدة، إنه
هذه الـA عند الـ0 وين راحت وإيش طلعت، طب إيش اللي
بدي أسوي؟ بدي أكمل، بدي أشوف، طب عند الـ1 وين
راحت؟ وإيش طلعت؟ وأسجل في الـstate table الجديد طيب
وارجعوا أن احنا دلوقتي كيف نشتغل نرجع الكتاب نتطلع
الآن كمان مرة مين هي الـA؟ هتقولولي الـA هي الـS0
ما ننساش مع الـS1 ما ننساش مع الـS3 ما ننساش الآن
بدي أشوف الثلاثة هدول أنا قلت عنهم إيش هيتصرفوا مع
X=1 كـstate وكـoutput تعالوا نشوف هذه الـS0 عند
الـ1 راحت على S2 وفراغ output أيه؟ فراغ إذا بدي
أسجل المعلومة هذه إذا باجي هنا بسجل الـS node عند
الـ1 راحت على S2 وطلع فراغ اللي هو الـoutput
فراغ طيب إذا بدي أكمل طب والـS1 نطلع الكتاب كمان
مرة الـS1 عند الـ1 وين راح؟ على S4 والـoutput بتاعه
عند الـ1 فراغ إذا هسجل أقول راحت الـS1 على S4 و
فراغ الآن ضايل عندي إيش؟ لسه بدي أفحصه الـS3 ده أنا
شغال على A اللي هو S0 S1 S3 الـS3 هذه وين راحت
تعال نشوف هي الـS3 وين راحت عند الـ1؟ على S0
أيوه وإيش طلعت؟ 0 فباجي بكتب راحت على S0 وطلع
0 الآن ثاني نشوف المجموعة الجديدة هذه هي 0
2 4 هذه مش اللي كانت قبل شوية هذه واحدة
جديدة وين موجودة هنا؟ طلعوا فوق هي موجودة هنا 0
2 4 صح ولا لأ؟ إذا طالما أعطاني الآن اسم
مجموعة جديدة بدي أعطيها اسم وأكمل فأنا بدي أسميها
مثلاً B بدي أعتبر أن هذه اسمها B لأن إيش أنا
أعتبر أن اسمها B يعني بدي أقول بدي أروح على لما
الـX=1 بدي أروح على B طب إيش الـoutput بدي
يكون؟ فراغ مع فراغ مع 0 إيش اتفقنا؟ بدي يكون الـ
output 0 مش هيك؟ يقولنا فراغ مع فراغ مع 0 يعني
0 فراغ مع فراغ مع 1 يعني 1 وهكذا إذا أنا
إيش اللي عملتها كمان مرة عشان الكل ينتبه أنا بدأت
من A اللي هي S node S1 وS3 طيب روح شوف كل واحدة
وين بتروح عند 0 وين بتروح عند 0 وين بتروح عند
0 وإيش بتطلع عند 0؟ طلعت لي مجموعة لما جيت
أشوف المجموعة لاقيتها هي نفسها A فروحت سجّلت A وسجّلت
الـoutputs اللي طلعوا بعدين روح عدّ كمان مرة لنفس
الثلاثة هدول عشان A بس بدي أعرف عند 1 وين 609 00:46:03,8
بدي أعيد الشغل عليها، إيش بدي أعيد الشغل عليها؟
بدي أشوف وين بدهم يروحوا، إيش بدهم يطلعوا outputs
عند X تساوي 1، يعني هرجع أطلع S0 وين راحت عند X
تساوي 1، و S2 وين راحت، و S4 وين راحت عند X تساوي
1، و إيش طلعوا output، وسجل عندي، وبعدين أحط في ال
table الأخير. تعالوا نطلع عند S0 و S2 و S4، إيش
عملوا عند X تساوي 1، هيا، نبدأ، هاي S0، هاي أول
واحدة عند X، انتبهوا عند X تساوي واحد هنا عند الـ X
هذه هي عند الـ X تساوي واحد. بدي أشوف أين روحنا
روحنا على S2، شايفين؟ روحنا على S2 والجواب الـ
output فراغ. إذا بدي أسجل المعلومة هذه على طول أقول
روحنا على S2 وطلع فراغ. هذا لو كنت أنا عند S1، sorry
لو كنت S node، أنت بتشتغل عند S node عند النقطة الآن
بدنا نشتغل نفس الفكرة. S2 وين راحت؟ تعالوا نشوف، هاي
S2، S2 هيها. S2 وين راحت عند واحد؟ انتبهوا، راحت على
فراغ. يعني ما عندي أي شيء، بسجلش أي شيء. وإيش الـ out
بتطلع فراغ. إذا أنا على طول بأقول، بقول ما فيش
عندي شيء أسجل هون، وفراغ لأنه فاضية، تمام؟ آخر شيء
في الـ .. في الـ .. في الـ .. في الـ B، الـ S4، هاي الـ S4
هاي وين راحت عند X يساوي واحد؟ تعالوا نشوف الـ S4 ..
الـ S4 الأخيرة. هتقول الـ S4 الأخيرة هي، وانتبهوا أني
بتطلع عند الواحد، ما ليش داعي في السفر، أنا السفر
فحصته قبل شوية. بتطلع عند الواحد، عند الواحد وين
راح؟ على S0، وإيش طلع output؟ طلع واحد، فبسجلها، بقول
عند ..S0، تمام، وطلع واحد. الآن خلوني أطلع هنا شوية
لأن هذه مجموعة من اثنين، مش من ثلاثة. ركزوا معايا
لأن هذا كلام مهم. الآن، الآن، أولاً كـ output الكل
هيقول لي سهلة، هيقول لي بحط واحد، خلصنا. لأن فرقنا، وفرقنا
هو واحد. لكن السؤال، S2 إيش بدك تحطها؟ أنت ما فيش
عندك من ثلاثات. قال لك أنت هنا مخيّر، ليش مخيّر؟ وين
المجموعات اللي فيها S2؟ هذه اللي هي B، وهذه اللي أنا
لسه ما استخدمتهاش، وما فيش S2. فأنت حر الآن، مسموح تحط
B، ومسموح تسمي هذه بـ D، وتحطها. بس أنا ليش ما أنا ما أنا
ما أنا ما أنا ما أنا ما أنا ما أنا ما أنا ما أنا ما أنا ما أنا
ما أنا ما أنا ما أنا ما أنا ما أنا ما أنا
بقول له مش غلط، لكن هتستمر حضرتك تحط لي C وتحلها، و
بعدين تحط لي D وتحلها. ما أقدرش أقولها غلط، لكن الناس
الشاطرة، ليش بقولوا؟ بقول: طب أنا ليش أفتح على حالي
شغل وأجيب رمز جديد، ويقعد يتعبني كمان شوية
ما يمكن أخلص بدون الرمز الجديد، فأنا بروحش بسوي
بقول: خلاص، ما زال S0، S2، بأخذ B وبروح، دماري، لكن هيك
صح، وهيك صح. عشان هيك أنا هقول هنا B، وهذه الحالة
ما بتصيرش الخيار إلا إذا طلعت معاك مجموعة من اثنين.
أنت الآن بطل في اثنينات، أنت بص ثلاثات، عشان هيك
بتشوف هدول الاثنين وين موجودات؟ موجودة هنا وموجودة
هنا. فاختار واحدة منهم، فأنا اخترت الـ B عشان ما
اضطرش أعمل تسمية لمجموعة ثالثة، وأفتح شغل. فعشان هيك
بقول: خلاص، خلّيني آخذ الـ B، بالله نتخلص بسرعة وما نضيعش
شغل زيادة، تمام؟ لكن احنا لحد الآن مش مخلّصين، ليش؟
لأن أنت فاتح شغل لـ C، لازم تخلص C. وإذا C جابت لك إجباراً
الـ D، غصباً عنك لازم تكمل الـ D. لكن طول ما أنا
قاعد أختار، أختار واحدة من اثنين، بحاول أبعد عن
الجديد، وآخذ اللي أنا شفته، اللي اشتغلته، وأحطه
عشان ما أفتحش على حالي شغل جديد. لكن مش بضرر، يمكن الـ
D بعد شوية، الـ C تجيبها، وممكن لأ، زي ما هنشوف كمان
شوية. إذن، أنا لحتى اللحظة، إيش اللي سويته؟ أنا خلّصت الـ
A، وخلصت الـ B. عرفت وين بيروح عند الصفر، وين بيروح
عند الواحد، إيش بتطلع output عند الصفر، وإيش بتطلع
عند الواحد. لكن لسه ما خلّصتش، لأنه أنا في هنا حاجة
اسمها C. إيش يعني في حاجة اسمها C؟ يعني الآن بدي
أعيد الشغل اللي عملته لـ A وعملته لـ B، أرجع أعمله
لمين؟ لـ C. طيب، كيف نعمله C؟ تعالوا نشوف، خلّيني بس
أنا أحط صفحة بيضاء ورا عشان نستوعب. إذا هيجي بنفس
الطريقة، نقول: أنا هي عندي C، شو أرقام الـ C؟ هاي
أرقام الـ C قبل شوية حددناها، اللي هم S0، S1، S4
طيب، إيش المطلوب مني الآن؟ أسوي نفس الفكرة، بدي أمسح
اللي كُتبته أنا، وأقول الآن أنا بدأ أشتغل على C
اللي هي مين؟ الـ C، اللي هي S0، و S1، و S4، تمام؟ إيش
بدي أشتغل عليها؟ بدي أقول عند X تساوي Zero، إيش هذه
و أين راحت؟ هذه، و أين راحت؟ هذه، و أين راحت؟ إيش الـ
output؟ إيش الـ output؟ إيش الـ output؟ و المعلومة
اللي تطلع، أدونها. وأعيد الشغل لـ C عند X تساوي واحد،
أشوف هذه، و أين راحت عند واحد؟ هذه، و أين راحت عند
واحد؟ هذه، و أين راحت عند واحد؟ وإيش الـ output؟ و
أدون المعلومة. إذا هذه جابت لي D، أنا مضطر أكمل D. إذا
ما جابت لي D، خلاص بوقف وأقول خلصت، وصار هذا الـ
state اللي انبسطت، الـ state، الـ table اللي انبسطت
الآن، خلينا نشتغل، كيبنا نشتغل على C، هنرجع على اسمه
الكتاب، نفحص الـ S node، نفحص الـ S1، نفحص الـ S4، وين
بيروحوا من X0؟ يلا نعمل زي ما عملنا قبل شوية علشان
نتأكد الأمور تمام. هيني، هفحص كمان مرة عناصر C اللي
هم S node، هيها، بدي أفحصها، و S1، هي هي، هبدأ أفحصها، و
S4، هي هي هي هي هي هي هي هي هي هي هي هي هي هي
هي هي هي هي هي هي هي هي هي هي هي هي هي هي هي
هي هي هي هي هي هي هي هي هي هي هي هي هي هي هي هي
هي هي هي هي هي هي هي هي هي هي هي هي هي هي هي
هي
هي هي هي. الآن بدي اشتغل مع S1، وين S1؟ هاي S1، هاي S1
تمام؟ وين راحت عند Zero؟ على S3، وإيش طلعت؟ فراغ.
بدي أسجل نفس القصة، راحت على S3 وطلعت فراغ. الآن، آخر
واحدة، S4، S4 وين راحت عند الـ Zero؟ هاي الـ S4، هاي
الـ S4، وين راحت عند الـ Zero؟ راحت على S Node، وإيش
طلعت؟ طلعت Zero. إذا بدي أسجلها، راحت على S Node
وطلعت Zero. إذا على طول بتقدر تقول لي الـ output عبارة
عن إيش؟ فراغ، فراغ، Zero. هتقول لي الـ output Zero، على
طول، sorry، هذا sorry، هنا الـ output، هذه مكان الـ
states، هنا الـ output، هتقول لي طلعت 0، تمام. طيب، وين
روحنا .. وين الـ S0، و S1، و S3؟ إيش اسمها؟ وينها S0، و
S1؟ هتقول لي هيها S0، و S1، و S3. احنا شفناها زمان، و
مسميينها A. إذا هتيجي حضرتك على طول إيش تقول؟ بتقول
بروحي على A، شايفين كيف إنه الـ C لو أجاني صفر بروح
على A، وبطلع output صفر. الآن خلصنا، ضايل نعيد هاي
عند واحد. وين بتروح عند واحد؟ وإيش الـ output
وأسجل في الجدول تبعي زي قبل شوية. يلا نبدأ نشتغل، S
node، هاي الـ S node كمان مرة، وين عند الواحد طلعت؟
هتقول لي طلعت S2 عند الواحد، وإيش الـ output؟ فراغ.
فأبدأ أسجل المعلومة هذه، طلعت S2، والـ output فراغ.
الآن بدي أفحص عند S1، عند الواحد، دي بالكوا، هاي
S1، هاي S1، هاي S1، عند الواحد راحت على S4، وطلعت
فراغ. فابدأ أسجلها، راحت على S4 وطلع فراغ. الآن بقى
الأخيرة واحدة بتُفحص عند الواحد، S4 وين بتروح الـ S4
وإيش بتطلع؟ تعالوا نشوف، هاي الـ S4، عند الواحد بتروح
وين؟ هيها، على S0 عند الواحد، وبتطلع إيش؟ واحد. إذا
باجي بسجلها، بقول: بتروح، أفضل من راح، تقول: تروح على S0
وبيطلع 1. على طول هذه خلصت، الـ output هتسجل حضرتك إيش
الـ output؟ واحد، لأن فراغ مع فراغ مع واحد، واحد. طيب
هذه إيش اسمها المجموعة؟ إنها S0، S2، S4، وينها S0، S4؟
هيها، اسمها B. فباجي بكتب هنا إيش؟ B. الآن أنا بدي
أوريكم على اللوح إيش اللي صار. لحظة، خلصت ولا ما خلصت؟
ما فتحتش معايا الـ C شغل جديد، فأنا لإن مش ملزم أجيب
الـ D وأشتغلها، ليش؟ أنا خلّصت، خلاص، الـ C ودّتني على A
وودّتني على B، وطلع الـ output، إيش بدي في الـ D؟
أروح أضيفها زيادة؟ فإذا احنا ما ضفناش الـ D، خلاص
خلصنا على A، B، C. طب، إيش يصير لو أنا ما انتبهتش، وروح
أضفت الـ D؟ مش مشكلة، مش غلط، لكن بتكونش في أبسط صورة
الـ state diagram. يعني لو أنت ضفت الـ D، يصير في عندك
D، والـ D هيرجع لـ A أو B أو C على حسب الشغل تبعها
لكن بتكونش في أبسط صورة. عشانك أنت حاول دائماً أنه
ما تفتحش شغل جديد. أنا قبل شوية وريتك لما كانوا
اثنين، ليش ما اخترتش الـ D واخترت الـ B على أمل إني
ما أشوفش الـ D، والأمل تبعي تحقق، والـ D ما ظهرتش خالص.
لكن لو أنت من أول اخترت الـ D، يعني لو فيه D كانت
مكتوبة هنا، أنت إجباري لازم تسجل الـ D، وأين بتروح، و
أين بتيجي، بس لأن الآن الـ C رجعتني لـ A، كانت
موجودة، أو لـ B موجودة، هذه ما حدش اتكلّم عنها، أمشي
أروح أسميها D، وأروح أحطها وأضيفها. أنا في غنى عن
ذلك، وبالعكس ارتحت منها. لكن هي مش شغل صعب، عادي، أنا
قادر أضيف D، ونفس الفكرة، وآخذ الثلاثه هدول، وعندي
الـ Zero، وأين راحت، وأشوف، وأنطلعه، وأسجل زي ما
عملنا قبل شوية، قادر أشتغل على الـ D، لكن ما فيش أي
داعي. طيب، الآن المهم أنا إيش اللي سويته من بداية
المحاضرة للآن؟ كل اللي سويته موضوع الـ state
reduction. شايفين؟ يعني الآن شايفين هذه الـ state
reduction اللي أنا حصلت عليها، اللي هي A, B, C، وخلاص.
وسكرت عليها. هذه مكان مين؟ أجدت هذه مكان السؤال
اللي أنا بديته، اللي هو، هي، تعالوا نطلع عليه ونشوفه 8
أخذنا كل الإضافة اللي في كتاب Ruth، وهنرجع زي ما
اتفاجأنا على كتاب Morris Mano، ونستكمل من Morris
Mano تمام. خلينا نروح الآن على كتاب Maurice Mano.
تمام.
أي كتاب Maurice Mano، ونبدأ في موضوع اسمه الـ state
assignment. خلاص، هي الـ state reduction خلصت. أي
ملاحظات، أي شيء تتواصلوا معايا وبتسألوني عنها بشكل
مباشر، إن شاء الله ما فيش مشاكل. طيب،
الآن الدرس أو الـ step أيضا اللي بتعتبر من الخطوات
الرئيسية في موضوع الـ design، حاجة بيسموها state
assignment state
assignment. إيش يعني state assignment؟ تعالى عشان
نفهم إيش يعني. نحاول نتطلع على الرسمة اللي معانا في
الكتاب. خلينا نتطلع عليها. زي ما أنتم شايفين، أنا
عندي دوائر، أعطيهم أسماء A, B, C, D, E. طبعا الأسماء هذه
بالنسبة لي أنا مشكلة. إذا أنتم بتتذكروا لما أخذنا
الـ analysis، إيش كنا نسوي؟ ما كناش نكتب A ولا B، كنا
نقول مثلا عندي أربع دوائر. أنتم بتتذكروا في الـ
analysis، كنا نقول 00، كنا نقول 100، كنا نقول مثلا 01،
كنا نقول مثلا 11، مش هيك؟ مش… مش كنا نحط قيم… مش
كنا نحط values، وكانت هذه الـ values مش هي بتمثل
القيمة بتاعة الـ flip-flop أو القيمة بتاعة الـ state،
صح ولا لأ؟ كمان مرة، لما كنا ناخد دائرة الـ circuit
فيها flip-flops ونعمل تحليل ونرجع بيها برجوع للـ
state diagram. الـ state diagram كيف كان؟ الـ state
diagram اللي كنت أحصل عليه كان فيه values، وكنا
فاهمين معنى هذه الـ values. هذه معناها أنه الفليب
فليب فليب فليب فليب فليب فليب فليب فليب فليب فليب
بينما لو كنت في الدائرة high، معناته أن flip-flop
الأولاني قيمته واحد، و flip-flop الثاني قيمته واحد
في الدائرة high، ولاحظنا أنه كل ما بيكتروا الـ flip
-flops بيكتروا الدوائر، صح ولا لا؟ يعني لو كان عندي
ثلاثة flip-flops، هيكون على الأقل maximum عندي، تمام،
دوائر، وكل واحدة فيها مثلا إيش؟ ثلاثة values على أساس
هذا الـ flip الأولاني، هذا الثاني، هذا الثالث، و
هكذا. طيب، إحنا اليوم نتكلم بالناحية العكسية، إيش
بالناحية العكسية؟ يعني أنا هو ما يعطيني الـ state
diagram ومخلص، والأصل أنه هاي نرجع فيها برجوع للـ
circuit اللي فيها flip-flop، bad وبالتالي لازم ما
أشوفش A، لازم بطريقة ما أشوف values مكان الـ A، و
values مكان الـ C، والـ B، والـ D، والـ E، حتى أبدأ
أفكر كام flip-flops موجود عندي. يعني على سبيل
المثال، لو جدلنا… فرضنا جدلا أن هذه القيم جوا 101،
على طول أنت هتستوعب أن في عندي ثلاثة flip-flops في
الحالة هذه. قيمة flip-flop الأولى واحد، flip-flop
الثاني صفر، flip-flop الثالث واحد. وبصير فيه إمكانية
لرسم الـ circuit مع flip-flops تبعاتك. لكن المشكلة
أنه لما بيكون في أسماء، مش أرقام، أسماء مش أرقام، مش
هنقدر نوصل للـ state، مش هنقدر نوصل لعدد flip-flops،
مش هنقدر نوصل لـ sequential circuit، مش هنقدر نعرف
تفاصيل. إذا، عشان نقدر نوصل بسهولة للـ circuit تبعتنا،
من ضمن الخطوات حاجة بيسموها State Assignment. إيش
يعني assignment؟ يعني بدنا نستبدل الأسماء بـ values،
بـ zeros and ones، بطريقة ما حتى أقدر أكمل مستقبلا،
وأوصل للـ circuit. طب، السؤال المهم الآن، على أي أساس
بدك تستبدل إيه؟ وإيش تستبدلها؟ إيش الطرق بتاعة الـ
state assignment اللي بتتكلم عنها؟ طبعا، عشان أعمل
state assignment، في عندي في الكتاب ثلاث طرق رئيسية.
بدنا نشوف كيف الطريقة الأولى، كيف الطريقة الثانية،
كيف الطريقة الثالثة، ونعتمد على الثلاثة ونشتغل.
الطريقة الأولى إيش بتقول؟ بتقول باختصار، بدنا
نستخدم طريقة الـ binary numbers.
إيش يعني الـ binary numbers؟ يعني الآن بسألك سؤال:
كام دائرة موجودة عندك؟ والله عندي أنا a, b, c, d, e،
عندي خمس دوائر. طيب، الخمس دوائر هدول بالـ binary، كام
بت بتلزمك علشان تقدر تغطيهم وتمثلهم؟ زي ما أخذنا
في logic one. طبعا لو قلنا بتين، بتين لا يكفي. ليش لا
يكفي؟ لأن البتين بيعملولي أربع احتمالات: صفرين،
واحدين، واحد صفر، صفر واحد. إذا البتين لا يكفي لتغطية
الخمسة هدول. طيب، لو قلنا في عندي ثلاث بتات، الثلاث
بتات بيعملولي 2 أس 3، ثمانية، يعني بيصير
عندي ثمان احتمالات، ومن logic one إحنا عارفين
مرقمين من zero zero zero، هيهم لغاية
لغاية 8، لأ، من 0 لـ 7، يعني 8 حالات، هاي، مظبوط ولا
لأ؟ إذا أول نقطة لازم نعرف عدد البتات، وعشان أعرف
عدد البتات، بدي أشوف كام دائرة عندي، عندي خمس
دوائر، الخمسة محصورة أو أقل من 2 أس 3، إذا بقول
بدي ثلاث بتات. طيب، لو عندي ست دوائر برضه بقول ثلاث
بتات، لأن إحنا الثلاث بتات كام حلقة بيعطوني ثمانية
إيش يعني بيعطوني ثمان حلقات؟ يعني بقدر أغطي ست
دوائر وسبع دوائر، maximum لثمان دوائر بقدر أغطي.
طيب، لو عندي مش ثمان دوائر، لو عندي تسع دوائر، اه،
الثلاث بتات بيكفوش، لأن الثلاث بتات زي ما إحنا عارفين
2 أس 3، ثمان احتمالات. طب، أنا عندي تسع
دوائر، أكتر من ثمانية، إذا إحنا هنضطر نقول باللزمني
أربع بتات، لأن الأربعة بتات زي ما اتفاجأنا قبل هيك
2 أس 4، ستة عشر احتمال، وبالتالي معايا أغطي
لستة عشر دويرة لو أنا أخدت أربع بتات. طب، لو أنا
أخذت خمس بتات، معايا أغطي 2 أس 5، 32 دويرة، و
هكذا. لو أخدت بتين، معايا أغطي لأربع دوائر. إذن، عشان
أحدد عدد البتات، صح، لازم أعرف كام دويرة عندي، عشان
أختار البتات صح في المثال هذا الموجود. عارفين، لو كانوا
أربع دوائر، كنا هنقول بيكفينا بتين، لأنه بتين
بت بيعملوا 2 أس 2، أربع حالات وخلاص، كل
دائرة بتاخد حالة بس. لأنه هنا عندي خمس دوائر، إذا
أنا ما بقدرش بالبتين أعملهم، لكن بقدر بالثلاثة، لأن
أنا عارف أن الثلاثة بيعملوني لثمان احتمالات، وأنا عندي
خمس دوائر، يعني معايا أغطي لثمان دوائر، إذا بدي
ثلاثة. وبالتالي في المثال هذا تحديدا، أنا بدي ثلاث بتات. طيب،
هذه أول نقطة. إذا عرفنا عدد البتات اللي بنستخدمهم
لتسمية الـ A، والـ B، والـ C، والـ D، والـ E. طيب، السؤال الثاني:
طيب، أنا الثلاث بتات هدول بيعملولي ثمان احتمالات، وهي
عندي الثمان احتمالات مكتوبين كيف… أخد… أخد مين
لإيه؟ أخد الأولى لإيه؟ أخد الثانية لإيه؟ أخد
الثالثة لإيه؟ إيش أعمل؟ الحلو في الموضوع، قال لو
أخذت أي خمسة بشكل عشوائي، وسميتهم لـ A, B, C, D, E، مش غلط.
يعني لو اجى على بالي أقول مثلا، بدي هذه أسميها A، و
بدي هذه أسميها B، وبدي هذه أسميها… يعني اخترت
خمسة بشكل عشوائي من هدول وعملت أسماء للـ A, B, C, D, E،
بالأرقام، قال ما عندي مشكلة. طب، افرض اجزملي، أخدت خمسة
ثانيات غير الخمسة اللي أنا أخذتهم، وراح سمى بطريقة
مختلفة، برضه مش مشكلة، صح؟ في النهاية الأشكال بتاعة الـ
circuits اللي هتنشى عندها في النهاية مختلفة شكلا،
لكن مضمونا بيشتغلوا نفس الشغل، وبالتالي إحنا حرين
ناخد أي خمسة، ونسويهم بـ A, B, C, D, E، ونكمل باقي
خطوات الـ design، لكن بنكون فاهمين أنه بتغير
الاختيار، بيتغير الشكل النهائي، لكن المضمون واحد،
بيعمل نفس الشغل، بطريقة هي ولا بهاي ولا هي بيعمل
نفس الشغل، لكن بيتغير الشكل. وإيش يعني بيتغير الشكل؟
يعني ممكن يطلع الشكل في logic كتير، hardware كبير،
ممكن يطلع لشكل logic صغير، hardware صغير. فممكن يطلع
زي هيك. إذا أنا أخدت بشكل عشوائي، تمام. طبعا في بعض
الكتب بتحاول تعلمنا طرق، إيش أفضل خيار آخذه بحيث
أحصل على دائرة صغيرة في النهاية، وهذا برا الـ scope
تبعنا، تمام؟ فإحنا اليوم هنتمعت على الطرق الثلاث،
أنه يا باخد خمسة عشوائي من الـ binary، وبسمي الـ
A, B, C, D، وبمشي، تمام؟ وهذه طريقة بنسميها بطريقة الـ
binary number. لكن إحنا في المصاد تبعنا هنتفق أنه
ما بدناش ناخد عشوائي في الـ binary، بدنا ناخد بالترتيب،
عشان حتى الأشكال والرسوم هتكون زي بعضنا. يعني أنا
بدي أفترض الـ default تبعنا أنه خلاص، الأولى بتاخدها
A، اللي وراها بتاخدها B، اللي وراها اللي
هي رقم 2 بتاخدها C، اللي وراها اللي هي D بتاخد 3،
واللي وراها الـ E بتاخد 4. خلاص، أنا هنا اخترت
الترتيب، أنه الـ zero الأولى للأولى، اللي بعدها لللي
بعدها، اللي بعدها لللي بعدها، ومشيت على هذا الأساس،
وهذا الكلام مش غلط، لكن إحنا من باب توحيد الحلول،
توحيد الشكل في النهاية، بدنا نعتمد على هذه الطريقة،
يعني بعد اليوم أنا أجي أحكيلكم، بدنا نعمل State
Assignment باختيار طريقة الـ binary numbers، الكل
يتعود يمشي بالترتيب، خلاص، 000 للـ A، اللي وراها
للـ B، اللي وراها للـ C، وهكذا، لكن برضه بدنا نكون
فاهمين أنه لو أنا في البيت بدي أشتغل، مش إجباري هذا
الكلام. أي خمسة من الثمانية أحطهم لـ A, B, C, D برضه
بمشي الحال، لأن إحنا من باب التوحيد والـ default،
بدنا نمشي بالترتيب. إذا أول طريقة بنسميها طريقة الـ
binary number للـ state assignment. طب، هل في طريقة
ثانية؟ اه، في طريقة ثانية اسمها الـ gray code أو الـ
gray assignment. إيش فكرة الـ gray assignment؟ قال
بدل ما نيجي نكتب الأرقام بالترتيب بالـ binary،
بنكتبهم بالـ gray code، وإحنا اتعلمنا في logic one
كيف نكتب بالـ gray code. يعني بدنا نكتب رقم zero بالـ
gray، رقم واحد بالـ gray، رقم اتنين بالـ gray، مش بالـ
binary. دي، بالكوا، رقم ثلاثة، أربعة، خمسة، ستة، سبعة،
بالـ gray، وبعدين أخد الأولى لـ A، والثانية لـ
B، والثالثة لـ C، والرابعة لـ D، والخامسة لـ E، زي ما
هو عامل هنا، أخذنا، نوريكم إياه. هيهم، طلعوا
الآن أنا بدي أسأل سؤال، على فرضية أن أنا في الخمس
دوائر اللي جاب لي شوية أخذت الـ one-hot assignment
إيش أنا one-hot assignment يعني؟ دويرة A بدل A
هتصير أكتب 1 وأربع أصفار. هذا شو معناه؟ هذا معناه أن
في عندي خمس flip-flops، تمام؟ اللي هو أول، ثاني، ثالث
رابع، خامس. فالبعض ممكن يقول لي: طب أنت مش ملاحظ أنه في
الـ one-hot assignment، قاعدين احنا بنزود لـ flip
-flops، مع أن أنا قادر بالـ binary يضل بس إيش؟ مش
احنا في الـ binary قلنا الـ A بتكون مثلاً بثلاث أصفار
يعني في ثلاثة flip-flops. فالبعض ممكن يتهيأ له
يقول: طريقة الـ one-hot assignment دائماً بيزيد فيها
عدد الـ flip-flops، وبالتالي الدائرة بتكبر. لأ، هذا
الكلام مش حقيقي، ومش بالضرورة. أنا ممكن أعمل ثلاثة
flip-flops، والـ logic كتير صار كبير ومكربس في
الدائرة، وفيما لو أن أنا عملت خمسة flip-flops، قال لك كل
الـ logic هذا راح، وبالتالي مش بالضرورة قد يكون
أحياناً الـ one-hot assignment يؤدي إلى دائرة صغيرة.
في النهاية فمش معناه.. من هنا انتبهوا، مش معناه
أنه أنا كترت عدد الـ flip-flops يعني الدائرة دائماً
بتبدأ تكبر. مش بالضرورة، صح؟ ممكن زاد عدد الـ flip
-flops، لكن ممكن الـ logic، الـ combination اللي موجود
في الدائرة، ماله؟ قلت بطريقة كبيرة. فمش بالضرورة يعني
نقول أن الـ one-hot assignment دائماً بيديني دوائر
أكبر. لأ، هو بيديك صح flip-flops أكثر، لكن in total
ممكن الدائرة بتاعتي تكون مالها؟ أصغر. يعني أنا أعمل
مثلاً ثلاثة flip-flops مع 100 بوابة، والله أعمل خمسة
flip-flops مع عشرين بوابة. فبتفرق معايا الخمسة flip
-flops مع عشرين بوابة بتكون أصغر. فما نفكر أن زيادة
flip-flops تؤدي بالضرورة إلى كبر الدارة. قد يكون أو
قد يكون لا، على حسب الـ design أو حسب الـ circuit
الموجود عندنا. فهذه النقطة ما تنسوها. إذا أنا عندي الـ
conclusion الآن لـ state assignment. في عندي الثلاث
طرق رئيسية، تمام؟ الـ binary assignment، الـ Gray
Assignment، والـ One-Hot Assignment. هاي الثلاث طرق
الرئيسية اللي موجودة عندنا. وبهيك احنا بنكون إيه
سوينا عملنا الـ State Assignment. طبعاً انتبهوا إيش
يعني قصدنا بالـ State Assignment؟ انتبهوا للقصة هاي
...هاي هنا، يعني هذا الـ table، هذه الرسمة خلاص. لو
عملت binary assignment، بعد اليوم هستبدل الـ A
بإيش؟ بثلاث أصفار. هستبدل الـ B بإيش؟ بـ 01. هستبدل الـ C
بإيش؟ طب أنا اخترت الـ binary assignment 010، هستخدم
بالدور الـ CD اللي هي ثلاثة، واستخدم 001، 4. وبهيك
أنا بكون قادر أكمل الشغل، وبكون قادر أكمل خطوات
حتى أوصل في النهاية للـ state diagram. احنا لحد هلق
إذا أخذنا بس خطوتين من خطوات الـ design الكبير، إيش
هم الخطوتين؟ ما فيش غيرهم، اللي هو موضوع أني أعمل
state reduction زي ما اتعلمنا، وبعد ما عملت الـ
state reduction، كيف أعمل أنا state assignment بأحد
الطرق الثلاث الموجودة، تمام؟ وبهيك احنا خلصنا
نقطتين رئيسيتين من نقاط الـ design، اللي هما الـ state
reduction والـ state assignment. طبعاً احنا اليوم
هانووقف على هيك بس، بدي أكون أنا برضه فاهم أنه لسه
الـ design، عشان أقدر أعمل design لـ controller ولا
لإشارة ولا لـ counter ولا لـ whatever. في عندي كتير
لسه خطوات. أنا بس اتكلمت فقط بالتفصيل بس عن خطوتين
ضمن هذه الخطوات الكثيرة، اللي هي خطوة الـ state
reduction بالتفصيل الممل، وخطوة الـ state assignment
اللي اتكلمنا عنها اليوم برضه بالتفصيل، إن شاء الله
اليوم هنوقف هان، والمحاضرة القادمة إن شاء الله
هنستكمل بقية خطوات الـ design من الألف إلى الياء إن
شاء الله رب العالمين. ويعطيكم الصحة والعافية.
ضروري تدرسوا أول بأول، لأنه الآن كل المحاضرات اللي
جاية بتعتمد على كل اللي بنحكيه اليوم. فأول بأول
احضروا محاضراتكم، وبسرعة ما تتأخروا بتسألوني بشكل
مباشر، أي وسيلة اتصال ما في عندي مشكلة، وأنا كمان مرة
هأعمل أكثر من مرة online sessions، حتى اللي في عنده
أي أسئلة يسأل، لأنه زي ما أنتم شايفين الدروس الآن
هتترتب على بعض، وربنا إن شاء الله يوفقكم ويعطيكم
الصحة والعافية، وإلى لقاء في المحاضرة القادمة.
يعطيكم العفو