هل لا تزال كتابة التعليمات البرمجية تعتبر تمثيلاً خوارزميًا؟[مغلق]

StackOverflow https://stackoverflow.com/questions/263834

  •  06-07-2019
  •  | 
  •  

سؤال

لقد فقدت للتو 50% من إجابتي في الاختبار لأنني كتبت الكود بدلاً من الخوارزمية في نصف الفصل الدراسي، مما أدى إلى نقلي من A إلى C.هل لا تزال كتابة التعليمات البرمجية تعتبر تمثيلاً خوارزميًا؟

ويكيبيديا:تمثيل الخوارزمية (نظرًا لأن أسلوب البرمجة يعتمد إلى حد كبير على الإجماع)

يحرر:حسنًا، دعوني أوضح بعض النقاط:

  1. طلب الاختبار رمزًا زائفًا، والذي لم "نحدده" أبدًا في الفصل؛لقد كتبنا للتو اللغة الإنجليزية لخوارزمياتنا.

  2. إنها فئة Java، وقد كتبت الحل بالكامل بطريقة Java، بالإضافة إلى التعليقات.كل هذا كان مكتوبًا بخط اليد، واستغرقت كتابته وقتًا أطول من التعليمات البرمجية الزائفة.اعتقدت أنه سيكون أكثر وضوحا.

  3. أنا عادة لا أثير مشكلة بشأن مثل هذه الأمور، ولكن هذا هو الفرق بين A وC، ولدي منحة دراسية في امتحاناتي.

  4. وأخيراً، أكتب هذه التدوينة لسببين:

    4.1 أريد أن أوضح ما يفكر فيه مجتمع البرمجة الحديث حول الكود الزائف والتمثيل الخوارزمي.

    4.2 أريد أن أعرف ما هو المقبول في "العالم الحقيقي"؛لقد قمت بالبرمجة لبعض الوقت، ولكني أريد أن أكون قادرًا على المساهمة في المشاريع مفتوحة المصدر قريبًا، ولا أريد أن أدوس على أصابع أي شخص.(على الرغم من أنني متأكد تمامًا من أن فرصة ظهور هذا الموضوع في العالم الحقيقي ضئيلة).

مرة أخرى، شكرا على أي مساعدة / نصيحة.

هل كانت مفيدة؟

المحلول

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

أعتقد أن الهدف الأساسي من التعلم هو إظهار أنك تفهم المفهوم، وليس الانحناء ووضع علامة في المربعات الصحيحة.

يمكن تعليم الكمبيوتر لاجتياز الجامعة، لكن لا يمكن تعليم الكمبيوتر حتى الآن كيف يفكر بنفسه ويطبق المعرفة.

عقلية الأكل والتقيؤ هي السبب وراء عدم تخرجي مطلقًا.


فيما يتعلق بتعليقك الأخير، من المهم أن تدرك أن الكود الزائف غير محدد.هناك مصطلحات مُعاد استخدامها بشكل عام، ولكنها ليست لغة صارمة أكثر من اللغة الإنجليزية (وإلا فستكون كذلك يكون لغة برمجة يمكن تحليلها وتنفيذها حرفياً)

ال أهمية من الكود الزائف هو تجسيد منطق جزء من النظام ولا داعي للقلق بشكل مفرط بشأن بناء الجملة الذي يتجاوز "إنه منطقي"

في كثير من الأحيان هذا يمكن أن يجعل الكود الكاذب أكثر مقتضب و أكثر قابلية للفهم.

الكود الكاذب أيضًا لا يعتمد على فهم القارئ لـ "بناء الجملة السحري" في اللغة من أجل معالجته، كل ما يحتاجون إلى فهمه هو المصطلحات المستخدمة.

إذا أعطيت الشخص العادي خوارزمية بلغة بيرل على سبيل المثال، فإن معظم الناس سيموتون من الرعب لأنهم لا يرون ما وراء ضوضاء الخط.

بينما:

sub foo { 
   my @args = @_ ; 
   my( $a, $b )=(@args[0],@args[1]); 
   for( @{ $a } ){
       $b .= $_ ; 
       s/id//g; 
   }
   return [$b,$a];
}

قد يقدم بعض المعنى المتماسك لشخص ما على دراية بلغة Perl، وبالنسبة لقارئ الكود العادي، كل ما يحصلون عليه هو رد "ماذا قلت للتو بحق الجحيم".توثيقه لا يساعد كثيرا أيضا.

| there is a subroute foo which can take a list of strings, and a default string, 
\-  which then iterates all items in  that list, 
| \-  and for each item in that list 
|     1. appends the contents of that item to the end of the default string
|     2. removes all instances of the string "id" in that item
| 
 \ and returns a list, which contains 
    1. the concatentated default string 
    2. the modified input list 

وفجأة يصبح الأمر أقل غموضا ويمكن لنسبة أكبر من الناس أن يفهموه.

لذلك من المحتمل أن نصف تمرين كتابة الخوارزمية هو تمرين في "ليس عليك فقط أن تثبت أنك تفهمها، بل عليك أيضًا أن تثبت أنك تستطيع شرح تفكيرك للآخرين الذين لا يعرفون شيئًا عن المشكلة"، وهو أمر حيوي القدرة التي تحتاجها.إذا لم تتمكن من توصيل ما قمت به، فلن يتمكن أحد من استخدامه.

هناك أيضًا مشكلة صغيرة سيئة تتعلق بالشفرة، وهي غير موجودة في الخوارزمية، وقد تكون هذه المشكلة ينظر الحق، ولكن قد لا تفعل ما لك يفكر إنه كذلك، وإذا لم يتم ذلك بشكل صحيح، ولا تدرك، فإن الأشخاص الذين يقرأون الهندسة العكسية للكود سوف يفسدونه وينسخون مكسور خوارزمية.ليس جيدا.الخوارزمية في شكل بشري تترجم بشكل أفضل "هذا ما أريد أن أفعله"

نصائح أخرى

وفي هذه الحالة عليك الرجوع إلى الأستاذ.

تحتاج إلى توفير المزيد من المعلومات.لقد طلب منك خوارزمية، ولكن تم توفير الكود.هل قمت بالتعليق على الكود؟كم ثمن؟(أود أن أرى السؤال وإجابتك، ولكن ربما يتطلب ذلك الكثير).

لذا سأجيب بناءً على تجربتي الخاصة.إذا كنت أطلب خوارزمية، فأنا أريد شيئًا يشرح، باللغة الإنجليزية اللائقة، كيفية حل المشكلة و/أو تلبية متطلبات السؤال.المخططات جيدة أيضًا (أحيانًا أفضل).فقرة، شكل نقطي، أيًا كان - يجب أن تكون واضحة وموجزة وصحيحة.

إذا زودتني بالكود الذي يقوم بما سبق، فستحصل على علامة كاملة.ومع ذلك، إذا قمت بتوفير تعليمات برمجية ذات "لغة" خالصة ومبهمة إلى حد ما، فسيتم فقدان العلامات - اعتمادًا على مدى تشفير التعليمات البرمجية فعليًا.حتى مع الكود، أود أن أرى رسمًا تخطيطيًا أيضًا، فقط لإظهار الفهم الكامل للمفاهيم.

أحد أصعب الأشياء التي أواجهها عند تدريس البرمجة هو جعل الطلاب يكتبون أكثر، وليس أقل.في بعض الأحيان كان علي أن أذكرهم بأن المهمة (أو الاختبار) ليست مشاركة في "مسابقة الأكواد الأكثر غموضًا".؛-)

هتافات،

باعتباري أحد طلاب دورة الخوارزميات المتقدمة، سأفعل ذلك دائماً نقاط الإقلاع إذا كان هناك ببساطة حل مشفر.

بعض الأشياء ببساطة لا يمكن التعبير عنها ببلاغة في الكود كما هو الحال في اللغة الإنجليزية.الكود الزائف هو محاولة للتحرر من بناء جملة المترجم الصارم والسماح ببعض التعبير.إنها خطوة في الاتجاه الصحيح لقابلية الفهم، ولكنها ليست كافية دائمًا.

خاصة في فئة الخوارزميات، من المهم دائمًا تقديم دليل على الصحة (سواء كان ذلك عن طريق الاستقراء أو التناقض أو ما إلى ذلك)، بالإضافة إلى تدوين كبير O للتعقيد المكاني والزماني للخوارزمية الخاصة بك.

كل ما أعرفه هو أنه لا ينبغي عليك كتابة أي كود إلا بعد أن يكون لديك خوارزمية.

المشكلة في استخدام الكود بدلاً من الكود الكاذب هي أنه، من الناحية النظرية، يمكن للمرء أن يفترض أنه كان كودًا، وليس كودًا زائفًا.على أي حال، يقوم المعلم بتقييمك على إجابتك، وليس على معرفتك - سيكون من الأفضل لك أن تجيب على ما طلب منك، بالمصطلحات التي يحبها المعلم.نعم، نحن جميعا نعرف، وأنت تعرف أفضل.لكن ليس من ممارسة سيئة أبدًا محاولة التفكير بطريقة شخص آخر، كما تعلم.وعلى الأقل في بلدي يحق للمعلم أن يقيمك بحرية، لذا...تعايش معه!

فقط تحدث إلى أستاذك واسأله لماذا أخطأت في السؤال.اسأله ما هي الإجابة الصحيحة، وما هو الفرق الأساسي بين الاثنين.

هل يمكن أن تكون الخوارزمية التي كتبتها غير صحيحة؟

الكود عبارة عن خوارزمية مكتوبة بحيث يمكن للآلة تنفيذها.لا يوجد شيء في هذا التعريف يقول أنه ليس مكتوبًا أيضًا ليفهمه الإنسان.هل أدت الكتابة بلغة Java إلى حجب الخوارزمية الخاصة بك؟وهذا من شأنه أن يحدد ما إذا كنت قد اتفقت مع معلمك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top