Saturday 24 February 2018

تتحرك متوسط متوسط جافا


تنفيذ متوسط ​​متحرك بسيط في جافا في عدة مناسبات أراد إيف حساب مقاييس بسيطة في تطبيقات جافا، على سبيل المثال عدد الزيارات في الساعة، أو أخطاء طوال فترة زمنية. في حين أن حساب مقاييس بسيطة ليس صعبا بشكل رهيب، إلا أن عمله الإضافي ومعرفه ينفقان ذلك الوقت على نطاق المشكلة. فوجئت بعدم العثور على أي حلول مقبولة على نطاق واسع للمقاييس في جافا. لم أجد المقاييس ولكن يبدو قليلا معقدة جدا وغير موثقة بشكل جيد - كل ما أردت حقا هو لحساب المتوسط ​​المتحرك. فكرت في المشكلة بعض أكثر وقررت أنها ليست مشكلة صعبة. هيريس الحل الخاص بي يعمل هذا من خلال إنشاء مجموعة من حجم التحديث تحديث النافذة، ثم مؤشر ترابط العد إلى الفهرس التالي في الصفيف على تردد التحديث. العد للفاصل هو ببساطة أري - arrayi1، وهو أحدث عدد ناقص أقدم عدد. لمدة 10 دقيقة الفاصلة، أقدم العد (i1) هو بالضبط 10 دقيقة من العمر. لإضافة المتوسط ​​المتحرك إلى التعليمات البرمجية لدينا أولا تحتاج جيدا عداد، وذلك باستخدام أتوميكلونغ. يجب زيادة هذا العداد استنادا إلى الأحداث التي تهتم بها في الحوسبة (مثل طلبات بوست لخدمة ريست). نحن بحاجة إلى توفير التنفيذ مع الوصول إلى العداد والتي يتم إنجازها من خلال واجهة جيتكونت. هنا إل إنشاء متوسط ​​متحرك مع نافذة 5 دقائق يتم تحديث كل ثانية. وللحصول على المتوسط ​​الحالي نحن ببساطة استدعاء الأسلوب جيتايفيراج: تفصيل التنفيذ الرئيسي هو كيف يتم تحديد حجم الصفيف: عن طريق قسمة النافذة عن طريق تكرار التحديث. لذلك نافذة كبيرة مع تكرار التحديث المتكررة يمكن أن تستهلك قدرا كبيرا من الذاكرة. في هذا المثال حجم صفيف هو معقول 300. ومع ذلك، إذا أنشأنا المتوسط ​​المتحرك 24 ساعة مع فاصل زمني 1 ثانية سيكون حجم 86400 تردد التحديث أكثر معقولية لفترة 24 ساعة قد يكون كل 5 دقائق (حجم صفيف من 288 ). وهناك اعتبار آخر لاختيار النافذة وتردد التحديث هو أن النافذة يجب أن تكون قابلة للتجزئة حسب التردد. على سبيل المثال نافذة 2 دقيقة مع تردد التحديث 6 ثانية على ما يرام، ولكن تردد التحديث 7 ثانية ليست كذلك، لأنه لا قسمة من قبل 120. يتم طرح إليغالارغمنتكسيبتيون إذا كان تردد تحديث معامل نافذة ليست صفر. يتطلب هذا التنفيذ مؤشر ترابط واحد لكل متوسط ​​متحرك، وهو ليس فعالا جدا. الحل الأفضل هو مشاركة مؤشر الترابط عبر العديد من المتوسطات. تحديث . إيف تحديث التعليمات البرمجية لمشاركة موضوع هنا. وأخيرا، ثيريس مشكلة حالة أولية: ليس لدينا بيانات حتى الآن للنافذة بأكملها. على سبيل المثال إذا كان لديك نافذة 5 دقائق و 15 ثانية فقط من البيانات. يرجع هذا التنفيذ نول حتى يكون لدينا 5 دقائق من البيانات. وثمة نهج آخر هو تقدير المتوسط. لنفترض أن لدينا عد 10 في 30 ثانية، ثم يمكننا تقدير المتوسط ​​كما 40 في 2 دقيقة. ومع ذلك هناك خطر حدوث خطأ كبير من خلال استقراء البيانات غير مكتملة. على سبيل المثال، إذا كان لدينا انفجار من 20 زيارة في 2 ثانية، ويد يكون تقدير 1200 في 2 دقيقة، والتي في جميع الاحتمالات هو طريق قبالة. الداخلية ل إيتيراتينغ كل الصفيف لذلك لماذا تحصل دائما على نفس المتوسط ​​(و واحد لمجموعة كاملة)، يجب أن يتكرر من 0 إلى العدد الحالي من الخارجي بدلا من ذلك. يتم تحديث المتوسط ​​المتحرك الخاص بك على أساس j الخاص بك الداخلية لهذا يعني أنه سيتم تجاوز القيم السابقة كل حلقة جديدة، وهذا ينبغي أن يكون داخل الخارجي بدلا من واحد الداخلي باستخدام ط الفهرس. كنت تقسيم سومج لحساب المتوسطات، كل حلقة داخلية جديدة ي سوف تقسم 0 المبلغ الأول. أعتقد أنك يعني استخدام j1 بدلا من ذلك، فهرس ليس نفس الطول الحالي نصائح لاستكشاف الأخطاء وإصلاحها: تجنب استخدام المتغيرات إلى المصفوفات حلقة، يجب عليك استخدام array. length بدلا من ذلك. بالنسبة لمسألة إعادة إنتاج مشكلتك، يمكن أن تعطينا المشكلة المعزولة بدلا من الشفرة الحالية. أي: تخيل إذا كان الخطأ في المدخلات الخاصة بك، كيف يمكن أن نعتقد كنت حقا استخدامها أجابوا أكتوبر 4 13 في 20:54 كنت حلقات على جميع البيانات في كل مرة. يجب أن يكون لديك (إنت j (إغتافيراجلنغثي-أفيراجيلنغث 2: 0) جلت إافيراج الطول 2 أمبامب جلتنومداتابوانتس j) (أو شيء مشابه) لمتوسط ​​الأعماق. أيضا، ينبغي تعديل موفينغفيراجيسومج للتعامل مع القضية عندما j هو 0. على وجه الخصوص، فإنه من المحتمل أن تتحركالمشغلةمعدل الطول ويجب أن تطبق على فتحة موفينغافيريجي خارج حلقة المتوسط. أجاب 4 أكتوبر 13 في 20:42 في المرة القادمة، والتعليقات حول المهمة من السؤال قبل نشره. ولكن بما أنك تبدو جديدة جدا في هذا الأمر، فكر في كيفية الانتقال إلى البيانات، وجعلها تفعل ذلك. يجب عليك محاولة للتأكد من كل حلقة توقف عند النقطة الصحيحة، وتذكر أنه إذا كنت ستتوقف عندما لا يكون هناك المزيد من الأرقام، (مثل عندما كنت تفعل الحلقة الداخلية ويمكنك فقط الحصول على 3 أرقام أكثر بدلا من 4) يحتاج البرنامج إلى وقف أيضا. تأكد من أن الشفرة تحقق من ذلك. أجاب 4 أكتوبر 13 في 20:56 دون أي تفاصيل إضافية، وربما كنت في حاجة الى المتوسط ​​المتحرك غير مرجح. في أي نقطة أي في صفيف الإدخال A من طول N (مع 0ltiltN)، هذا ببساطة يعني الإدخالات K السابقة من مجموعة، تصل إلى بما في ذلك منظمة العفو الدولية. وإذا كان هناك قيم K K، فإن متوسط ​​القيم (i1) من A0 إلى أي. شامل. قليلا من الفكر سوف تظهر لك أنك لا تحتاج إلى إضافة ما يصل كل القيم K في كل مرة. ما عليك سوى الاحتفاظ بالمبلغ، وعند الانتقال إلى النقطة التالية (هذا متوسط ​​متحرك)، طرح القيمة التي يتم استبدالها وإضافة القيمة الجديدة التي ستحل محلها. (خلال نقاط K-1 الأولى، ستضيف ببساطة القيمة الجديدة للمجموع وتزيد العداد بمقدار 1.) في أي مرحلة من هذه العملية، المتوسط ​​المتحرك هو المبلغ الحالي مقسوما على قيمة العد الحالية. أجاب 4 أكتوبر 13 في 21:05 في المتوسط ​​المتحرك، تحتاج إلى أن يكون نوعا من حجم النافذة. حجم النافذة الخاص بك هو متوسطالطول، لذلك سوف تبدو شيئا من هذا القبيل: ل حلقة يبدأ في البيانات الحالية ويعود نقاط البيانات متوسطيطول ويضيف لهم. سيكون لديك متوسط ​​متحرك فقط عندما يكون لديك عندما يكون لديك ما يكفي من نقاط البيانات والمتوسط ​​سيكون مجموع مقسوما على متوسط ​​الطول. ملاحظة: لم تختبر كود سودو فقط، ولكن هذه هي الفكرة. أجاب 4 أكتوبر 13 في 21:05 الإجابة الخاصة بك 2017 كومة الصرف، إنسي تحتاج إلى تتبع آخر 7 أيام عمل ساعات في ملف القراءة حلقة مسطحة. يتم استخدامها لقياس التعب من قوائم العمل. الآن لدي شيء يعمل، ولكن يبدو مطول نوعا ما و إم غير متأكد ما إذا كان هناك نمط أن أكثر وضوحا. حاليا، لدي فئة جافا مع صفيف ثابت لعقد البيانات x أيام الماضية، ثم كما قرأت من خلال الملف، أنا ختم العنصر الأول ونقل 6 أخرى (لمدة أسبوع المتداول) مرة أخرى. تتم معالجة هذه المصفوفة الثابتة في أسلوبها الخاص أي. سؤالي: هل هذا هو نهج تصميم معقول، أو هل هناك شيء واضح بشكل واضح وبسيط للقيام بهذه المهمة شكرا رفاق طلب أغسطس 30 11 في 14:33 شكرا الكثير من الرجال: I39ve حصلت على الرسالة: استخدام كائن على مستوى عال واستغلال الأساليب ذات الصلة أو العازلة دائرية. إجابات عظيمة، كل منهم. عندما تفكر في ذلك، كنت دائما بحاجة إلى الوصول إلى مجموعة كاملة حتى تتمكن من التخلص من هذا الإدخال الأول - الذي كنت wasn39t 100 متأكد من بلدي. I39m بالارتياح بأنني hadn39t غاب عن 1 بطانة وكان أساسا على معقول، إن لم يكن كفاءة وتتبع المسار هذا هو ما أحب حول هذا الموقع: ذات جودة عالية، والأجوبة ذات الصلة من الناس الذين يعرفون شت بهم. نداش Pete855217 30 أغسطس 11 في 15:05 لماذا يتم التهيئة الأولية الجري الإجمالي إلى نول ما هو نوعه حيث يتم الإعلان أنه سيكون جيدا إذا وضعت بعض عينات التعليمات البرمجية التي تشبه رمز جافا الفعلي. الانتقال، النقد بلدي سيكون ما يلي: وظيفتك لا أكثر من اللازم. يجب أن تكون الدالة أو الطريقة متماسكة. ومن الأنسب أن يفعلوا شيئا واحدا وشيئا واحدا فقط. والأسوأ من ذلك، ما يحدث في حلقة الخاص بك عندما x 5 يمكنك نسخ تشغيلTotal6 في تشغيل إجمالي 5. ولكن بعد ذلك لديك نسختين من نفس القيمة في موقف 5 و 6. في التصميم الخاص بك، وظيفة موفسوفلز العناصر الموجودة في صفيف الخاص بك بحساب الاشياء يطبع الإجمالي إلى خطأ قياسي إرجاع المجموع فإنه لا أكثر من اللازم. اقتراحي الأول ليس نقل الأشياء في المصفوفة. بدلا من ذلك، تنفيذ المخزن المؤقت دائري واستخدامه بدلا من الصفيف. فإنه سيتم تبسيط التصميم الخاص بك. اقتراحي الثاني هو تقسيم الأمور إلى وظائف متماسكة: لديها بنية بيانات (المخزن المؤقت الدائري) تسمح لك بالإضافة إليها (والتي تسقط أقدم إدخال كلما وصلت إلى قدرتها). إنتيراتور ديك وظيفة التي تحسب المجموع على التكرار (أنت لا تهتم إذا كنت حساب المجموع من مصفوفة، قائمة أو دائري بوفر.) لا يطلق عليه المجموع. استدعاء المبلغ، وهو ما كنت الحوسبة. هذا ما معرف تفعل :) that39s معلومات كبيرة لويس، ولكن تذكر هذه الوظيفة هو جزء صغير من وظائف الطبقة، وسيكون من المبالغة لإضافة الكثير من التعليمات البرمجية لجعلها مثالية. كنت صحيحا من الناحية الفنية، وأنا أفهم رمز بلدي لا 39too much39 ولكن في نفس الوقت أحيانا it39s أفضل أن يخطئ على جانب أصغر، رمز أكثر وضوحا من الذهاب للكمال. نظرا لمهارات جافا، حتى جعل الكود الكاذب الذي تصفه تجميع سيكون لي ضربة ميزانيتي على هذا ()، ولكن شكرا لوصف واضح. نداش Pete855217 31 أغسطس 11 في 02:23 همم، it39s ليس عن الكمال، ولكن عن الممارسات الصناعية المعمول بها التي نعرفها على مدى 3 عقود الماضية. التعليمات البرمجية النظيفة هي دائما واحدة التي يتم تقسيمها. لدينا عقود من الأدلة تشير إلى أن هذا هو الطريق للذهاب في الحالة العامة (من حيث الكفاءة من حيث التكلفة، والحد من العيب، والفهم، وما إلى ذلك). إلا إذا كان رمي بعيدا رمز لنوع لمرة واحدة من الشيء. ليس من المكلف أبدا القيام بذلك عندما يبدأ المرء أي تحليل المشكلة بهذه الطريقة. ترميز 101، وكسر المشكلة ويتبع التعليمات البرمجية، لا مبالغة ولا صعبة) نداش luis. espinal 31 أغسطس 11 في 15:55 مهمتك بسيطة جدا و أبروتش كنت قد اعتمدت هو بالتأكيد جيدة لهذا المنصب. ومع ذلك، إذا كنت ترغب في استخدام تصميم أفضل، يجب التخلص من كل هذا العدد حركة يمكنك استخدام أفضل طابور فيفو والاستفادة من وسائل الدفع والبوب ​​على نحو جيد الطريقة التي رمز لن تعكس أي حركة البيانات، فقط المنطقين الإجراءات من البيانات الجديدة وإزالة البيانات أقدم من 7 أيام. أجابيد أوج 30 11 في 14:49

No comments:

Post a Comment