هل يعتبر تفضيل حلول القوة الغاشمة علامة سيئة؟[مغلق]

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

  •  03-07-2019
  •  | 
  •  

سؤال

أنا مبرمج مبتدئ في لغة C++، ولكي أتوسع في تفكيري، كنت أحاول حل بعض المشكلات projecteuler.net.على الرغم من اهتمامي بالرياضيات في المدرسة، فقد وجدت نفسي أتوجه تلقائيًا إلى حلول القوة الغاشمة للمشكلات، بدلاً من البحث عن شيء مبسط أو أنيق.

هل هذا يبدو وكأنه عقلية سيئة لديك؟أشعر بالذنب قليلاً عند القيام بذلك، لكن ربما يكون الأمر سريعًا وقذرًا أمرًا جيدًا في بعض الأحيان...

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

المحلول

وأعتقد أنك يجب أن ننظر إلى ما الهدف النهائي هو وما هي القيود الخاصة بك.

في بعض الأحيان أسلوب القوة الغاشمة يمكن أن تحل مشكلة في 50ms يجرب كل مجموعة من الحلول و "ذكي" الحل لا يمكن حلها في 10ms. في تلك المرحلة، وأقل ذكي ولكن أسهل للفهم حل تتفوق على حل ذكي.

ولكن هناك بعض المشاكل لن ينجح حيث الغاشمة مما اضطر لن يكون فقط غير أنيق ولكن ببساطة. هناك العديد من المشاكل حيث إذا حاولت بسذاجة القوة الغاشمة منهم سوف يستغرق قدرا كبيرا من الوقت لحلها. لذا من الواضح أن هذه الأنواع من المشاكل بحاجة إلى نهج أكثر أناقة.

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

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

نصائح أخرى

لا، هذا ليس أمرا سيئا. لقد كان الحلول التي كانت أنيقة حتى أنهم كانوا مخطئين.

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

وعندما تصبح بارعا في C ++ ولم يكن لديك للتفكير في كيفية أن تفعل كل شيء يذكر، <م> ثم سوف تكون قادرة على انفاق المزيد من الوقت اختراع حلول غير القوة الغاشمة.

ولم تنشأ الحلول أنيقة بشكل عفوي. كانت مستمدة من الحلول القوة الغاشمة عند سرعة أكثر أو أقل استهلاك الذاكرة كان مطلوبا من الحل الحالي.

وحتى لا، انها ليست. بل كيف جاءت الحلول أنيقة حيز الوجود.

لقد مررت بهذا التطور نوعًا ما:

  1. احصل عليه لتجميع
  2. جعلها تعمل كما هو متوقع
  3. اكتشف حلًا واحدًا ناجحًا
  4. اكتشف حلاً واحدًا جيدًا
  5. اكتشف حلولاً متعددة، وابحث عن الأفضل
  6. اكتشف حلولاً متعددة، وابحث عن الأفضل لهذه الحالة
  7. ؟؟لم نصل الى هناك بعد

وأود أن أقول إن لا، انها ليست علامة سيئة. في الواقع كنت تفعل لنفسك صالح التي كتبها تتجه بعيدا عن تحسينات سابقة لأوانها، والذي هو بالتأكيد شيء جيد.

وكين تومسون: "عندما تكون في شك، استخدام القوة الغاشمة"

والتعلم هو عملية القوة الغاشمة. لن أقول لها سيئة. في محاولة لفعل شيء على هذا النحو قد تلاحظ وجود نمط. أعتقد طالما كنت تفكر في شيء ومحاولة إيجاد حلول سوف تتعلم. وهناك عدد قليل من الناس الذين القفز فقط إلى حلول أكثر أناقة أو فعالة.

وسيكون من الصعب إقناع لي ان الناس الذين يحاولون تعلم يمكن أبدا أن يسمى سيئة. ربما باستثناء عالم الشر: P

وحظا سعيدا.

هل تناسب داخل القاعدة وقت التشغيل 1 دقيقة لمشاكل؟ إذا كانت الإجابة بنعم، ثم بك "القوة الغاشمة" حل يلبي جميع الاحتياجات، وهذا في الواقع علامة جيدة للغاية التي يمكن أن تأتي بسرعة مع شيء يعمل!

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

إذا كان يحدث أن تكون الحالة التي يكون فيها "القوة الغاشمة" => "بسيطة" و "أنيقة" => "معقدة"، ثم يفوز القوة الغاشمة. وهذا هو في كثير من الأحيان صحيح.

وليس على الإطلاق. الحصول على حل المشكلة بشكل صحيح وبشكل كامل ثم جعلها أكثر performant للأو أنيقة حسب الضرورة.

وهذا لا يعني أنك يجب تجاهل تحسينات في الأداء واضحة ... فقط لا تركز عليها حتى تفهم المشكلة بشكل أفضل.

لوضع هذا في سياق مختلف:

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

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

تعد حواجز الطرق فظيعة عند البرمجة، ويجب تجنبها بالتأكيد أكثر من حلول القوة الغاشمة.

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

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

لديك وزن ديك الخيار. إذا كان هذا الحل القوة الغاشمة سوف ننجز هذه المهمة وأداء طيب، بل هو حل جيد.

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