في الأيام الأخيرة ، أبحث عن وظيفة في الطقس البارد الذي بلغ 40 درجة في شنغهاي. أشعر بالسعادة الشديدة. في كل مرة أقابلها ، يجب أن أجلس هناك والتعرق لفترة طويلة قبل أن أتمكن من العودة إلى حواسي. أشعر بالحب العميق للعالم بالنسبة لي. عدت إلى الموضوع. خلال المقابلة ، واجهت العديد من الاختبارات المكتوبة. هناك سؤال واحد. بما أنني لم أواجهها أبدًا في عملي الفعلي ، فإنني أنتبه إليه. السؤال كما يلي:
هناك صفيف: var arr = [1،2،1،3،3،2،4،6،3] ، والذي تم تغييره إلى توزيع طبيعي عن طريق المعالجة: [1،2،3،3،6،4،3،2،1].
سأشرح باختصار التوزيع الطبيعي. في الواقع ، يمكنك فهم الصفيف المعالج تقريبًا. الطرفين صغيران والوسط كبير. المنحنى الطبيعي ينعكس في محور الإحداثيات على شكل ساعة ، مع ارتفاع كلا الطرفين والمتوسط. المتماثلان الأيسر واليمين لأن منحنياتها على شكل جرس ، لذلك غالبًا ما يطلق عليه الناس منحنيات على شكل ساعة.
هذا هو السؤال الأخير للمقابلة. عندما حصلت عليها هنا ، كنت ضيقًا وكان الطقس حارًا وعطشًا وجائعًا. كانت الفتاة الموجودة في مكتب الاستقبال تبدو جيدة جدًا (توقف عن الحديث عن هراء ، كان ذلك لأن الخوارزمية كانت ضعيفة ...). بعد القليل من التفكير ، كتبت الرمز التالي:
var arr = [1،2،1،3،3،2،4،6،3] ~ (function (arr) {var temp = [] ، i = 0 ، l = arr.length ، sortarr = arr.sort (function (a ، b) {return ab}) // ترتيب الصفيف أولاً من صغير إلى كبير للحصول على [1 ، 1 ، 2 ، 3 ، 3 ، 3 ، 4 ، إذا (i ٪ 2 == 0) {temp [i/2] = sortarr [i] // ضع المشتركين في الجبهة بترتيب الأرقام الزوجية} آخر {temp [l- (i+1)/2] = sortarr [i] // ضع النطاقات في الظهر في المقدمة بترتيب الأرقام الفردية}} console.log (temp) // مثالي}) (ARR)نظرًا لأنه كان اختبارًا مكتوبًا ، فقد قمت بالبرنامج في ذهني لفترة من الوقت وشعرت أنه لم تكن هناك مشكلة كبيرة وسلمت الورقة. في وقت لاحق ، نظر القائم بإجراء المقابلة في ورقة الاختبار ولم يذكر هذا السؤال أثناء المقابلة. لذلك شعرت أنه لا توجد مشكلة في هذه الطريقة ، لذلك لم أسأل مرة أخرى أثناء المقابلة. ومع ذلك ، في طريق العودة ، فكرت فجأة في موقف مثل هذا:
var arr = [1،2،3،4،5،6،7،8،9] Temp [L- (I+1)/2] = Sortarr [i]}} console.log (temp) // [1 ، 3 ، 5 ، 9 ، 8 ، 6 ، 4 ، 2] حدثت المشكلة.
نعم ، وبهذه الطريقة ، فإن الأجزاء اليمنى واليسرى من هذه الصفيف ليست متناظرة ، مع 9 كمركز ، مع 1+3+5+7 = 16 على اليسار ، و 2+4+6+8 = 20 على اليمين. من الواضح أن اليسار خفيف واليمين ثقيل ، وليس توزيعًا طبيعيًا موحدًا. مع نمو الصفيف ، ستصبح المشاكل أكثر جدية.
خطوط الأشرطة. . . . أنا برعم على وشك الازدهار. لا تعاملني هكذا. . .
يبدو أنه لا يمكن استخدام الكود السابق ، لذلك لا يمكنني إعادة التفكير إلا في الحل. في الواقع ، فإن جوهر المشكلة هو التأكد من أن الجوانب اليمنى واليسرى من الصفيف متساوية أو متساوية تقريبًا. سواء كانت مجموعة من الأرقام الفردية أو حتى الأرقام ، يمكن تقسيم الصفيف إلى جزأين (يمكن اعتبار القيمة القصوى للأرقام الفردية أيضًا صفيفًا متساويًا. حتى لو كانت هناك قيم أقصى متطابقة متعددة ، فهذا لا يهم. بعد الفرز من صغير إلى كبير ، يحتاج إلى إزالة آخرها). أو وفقًا للطريقة المذكورة أعلاه ، عندما يكون المُخبر حتى ، ضعه على الجانب الأيسر والأيمن عندما يكون غريباً ، ضعه على الجانب الأيمن. في عملية زراعة الصفيف على الجانب الأيسر والأيمن ، عندما تكون أطوال الصفيف متساوية ، قارن مجموع الجانبين الأيسر واليمين. نظرًا لأنه يتم ترتيبه من صغير إلى كبير ، في ظل الظروف العادية ، سيكون الجانب الأيمن أكبر من الجانب الأيسر ، ثم تبديل الأول على اليمين والآخر على الجانب الأيسر لتحقيق الغرض من التوازن. الرمز كما يلي:
var arr = [1،2،3،4،5،6،7،8،9] ، sortarr = arr.sort (function (a ، b) {return ab}) ، l = arr.length ، temp_left = [] temp_left.push (eq): temp_right.unshift (Eq) if (i> 1) {if (temp_left.length == temp_right.length &&! compare (temp_left ، temp_right)) temp_left.concat (temp_right)} // Array Sum Function Sum (arr) {return aluading (arr.join ("+")) ؛ }. 5 ، 3 ، 2]بهذه الطريقة ، سيكون التوزيع الطبيعي بأكمله أكثر اتساقًا. قم ببعض مجموعات الاختبارات الأخرى لمعرفة التأثير:
ARR = [1،333،444،555،66،7788،909] console.log (sort (arr)) // [1،444،909 ، 7788،55،333،66] arr = [168.6،177.5،174.2،189.3،167.2،177.6،167.8،175.5] console.log (Sort (ARR)) // Budap167.2،174.2،175.5،189.3،177.6،177.5،168.6،167.8]
يبدو جيدا. هناك مقال آخر في الموقع الصغير النقر على العرض ، والذي تم الانتهاء منه في C ++. ومع ذلك ، فإن النتيجة النهائية للمقال لم تكن توزيعًا طبيعيًا موحدًا ، لكنها كانت مشابهة لبرنامجي الأول.
لا أعرف الكثير عن C ++ ، ولم أقوم بتشغيل مجموعات متعددة من النتائج لأرى. يمكن للطلاب المهتمين تجربتها كمقارنة.
لقد اختبرت فقط جميع البرامج في هذه المقالة في Chrome. إذا كانت هناك أي مشاكل مع المتصفحات الأخرى ، آمل أن أترك رسالة لإبلاغك. في الواقع ، هذا الشيء ليس صعبًا. فقط استخدمه كسجل ويمكن استخدامه عند الحاجة.