ง่าย เฉลี่ยเคลื่อนที่ ขั้นตอนวิธี จาวา
การใช้งานง่ายใน Java ในหลาย ๆ ครั้งฉันต้องการคำนวณเมตริกแบบง่ายๆในแอปพลิเคชัน Java ของฉันเช่นจำนวนการเข้าชมต่อชั่วโมงหรือข้อผิดพลาดตลอดช่วงเวลาขณะที่การคำนวณเมตริกแบบง่ายไม่ใช่เรื่องยากมากนักเพียงเท่านี้ ทำงานพิเศษและฉันค่อนข้างใช้เวลาในโดเมนปัญหาที่ฉันรู้สึกประหลาดใจที่ไม่พบโซลูชันที่ยอมรับอย่างกว้างขวางสำหรับตัวชี้วัดใน Java ฉันได้พบ Metrics แต่ดูเหมือนบิตซับซ้อนเกินไปและไม่ดี documented - ทั้งหมดที่ฉันต้องการคือการ คำนวณค่าเฉลี่ยเคลื่อนที่ฉันคิดเกี่ยวกับปัญหาบางอย่างมากขึ้นและตัดสินใจว่าไม่ใช่ปัญหาที่ยากนี่คือโซลูชันของฉันนี่ทำงานได้โดยการสร้างอาร์เรย์ของขนาดความถี่การอัปเดตของหน้าต่างจากนั้นชุดข้อความจะนับเป็นดัชนีถัดไปในอาร์เรย์บน ความถี่การอัพเดตนับเป็นเพียงอาร์เรย์ i-array i 1 ซึ่งนับเป็นจำนวนล่าสุดนับจากจำนวนที่เก่าที่สุดนับเป็นระยะเวลา 10 นาทีการนับที่เก่าที่สุด i 1 เท่ากับ 10 นาที old. To เพิ่มการเคลื่อนย้าย ค่าเฉลี่ยของรหัสของเราเป็นอันดับแรกเราจำเป็นต้องมีตัวนับโดยใช้ AtomicLong ตัวนับนี้ควรเพิ่มขึ้นตามเหตุการณ์ที่คุณสนใจในการคำนวณเช่นคำขอ POST สำหรับเซอร์วิส REST เราจำเป็นต้องจัดเตรียมการเข้าถึงโดยใช้เคาน์เตอร์และนั่นคือ ทำได้โดยใช้อินเตอร์เฟซ GetCount นี่ฉันจะสร้างค่าเฉลี่ยเคลื่อนที่โดยใช้หน้าต่าง 5 นาทีที่อัปเดตทุกวินาทีและเพื่อให้ได้ค่าเฉลี่ยในปัจจุบันเราเพียงแค่เรียกเมธอด getAverage รายละเอียดการใช้คีย์หลักคือขนาดของอาร์เรย์จะพิจารณาจากการหารหน้าต่าง ด้วยความถี่ในการอัพเดตดังนั้นหน้าต่างขนาดใหญ่ที่มีความถี่ในการอัพเดตบ่อย ๆ จึงสามารถใช้หน่วยความจำจำนวนมากได้ตัวอย่างเช่นขนาดอาร์เรย์มีความสมเหตุสมผล 300 แต่ถ้าเราสร้างค่าเฉลี่ยเคลื่อนที่ 24 ชั่วโมงโดยใช้ช่วงเวลา 1 วินาทีขนาดจะเท่ากับ 86400 A ความถี่การอัพเดตที่เหมาะสมมากขึ้นสำหรับช่วงเวลา 24 ชั่วโมงอาจเป็นทุกๆ 5 นาทีขนาดอาร์เรย์ของ 288 การพิจารณาการเลือกหน้าต่างและความถี่ในการอัปเดตเป็นหน้าต่างจะต้องเป็น di มองเห็นได้ตามความถี่ตัวอย่างเช่นหน้าต่าง 2 นาทีที่มีความถี่การอัพเดต 6 วินาทีก็ใช้ได้ แต่ความถี่ในการอัพเดตครั้งที่ 7 ไม่ใช่เพราะไม่มีการหารด้วย 120 ข้อผิดพลาด IllegalArgumentException จะถูกโยนออกถ้าความถี่ในการอัปเดตโมดูลโมดูลัสของหน้าต่างไม่เป็นศูนย์ การดำเนินการต้องมีเธรดต่อค่าเฉลี่ยเคลื่อนที่ซึ่งไม่ได้มีประสิทธิภาพมากการแก้ปัญหาที่ดีกว่าคือการแชร์เธรดในหลาย ๆ ครั้งอัพเดตฉันได้อัปเดตโค้ดเพื่อแชร์เธรดที่นี่แล้วมีปัญหาสถานะเริ่มต้นที่เราไม่มีข้อมูล แต่สำหรับหน้าต่างทั้งหมดตัวอย่างเช่นถ้าคุณมีหน้าต่าง 5 นาทีและเพียง 15 วินาทีของข้อมูลการดำเนินการนี้จะส่งกลับค่า null จนกว่าเราจะมีข้อมูล 5 นาทีวิธีอื่นคือการประมาณค่าเฉลี่ยสมมติว่าเรามีจำนวน 10 ใน 30 วินาทีจากนั้น เราสามารถประมาณค่าเฉลี่ยได้ 40 ใน 2 นาทีอย่างไรก็ตามความเสี่ยงของข้อผิดพลาดที่สำคัญคือการคาดการณ์ข้อมูลที่ไม่สมบูรณ์อย่างมากตัวอย่างเช่นถ้าเรามีการระเบิด 20 ครั้งใน 2 วินาทีเราต้องประมาณ 1200 ต่อ 2 นาทีซึ่ง h ในโอกาสทั้งหมดเป็นวิธี off. I ต้องติดตามล่าสุด 7 วันชั่วโมงการทำงานในไฟล์แบน loop อ่านมัน s ถูกใช้ในการวัดความเมื่อยล้าของ rosters. Right งานตอนนี้ฉันมีสิ่งที่ทำงาน แต่ดูเหมือน verbose ค่อนข้าง และฉันไม่แน่ใจว่ามีรูปแบบที่มากขึ้น succinct ขณะนี้ฉันมีชั้น Java กับอาร์เรย์แบบคงที่จะเก็บข้อมูล x วันล่าสุดแล้วในขณะที่ฉันอ่านไฟล์ที่ฉันสับออกองค์ประกอบแรกและย้าย อื่น ๆ 6 สัปดาห์รวมกลิ้งโดยหนึ่งการประมวลผลของอาร์เรย์แบบคงที่นี้จะทำในวิธีการของตัวเองคำถาม ie. My คือวิธีการออกแบบที่เหมาะสมหรือมีสิ่งที่เห็นได้ชัด blindingly และง่ายในการทำงานนี้ขอบคุณ guys. asked สิงหาคม 30 11 at 14 33 ขอบคุณมาก guys ฉัน ve มีข้อความใช้วัตถุระดับสูงและใช้ประโยชน์จากวิธีการที่เกี่ยวข้องหรือคำตอบที่ดีวงกลมคำตอบที่ดีทั้งหมดเมื่อคุณคิดเกี่ยวกับมันคุณต้องเข้าถึงอาร์เรย์ทั้งหมดดังนั้น คุณสามารถกำจัดรายการแรกที่ฉันไม่ได้แน่ใจ 100 ด้วยตัวของฉันเองฉันรู้สึกโล่งใจที่ฉันไม่ได้พลาดลินินบางส่วนและเป็นพื้นฐานในการติดตามที่สมเหตุสมผลหากไม่ได้ผลและสั้นนี่คือสิ่งที่ฉันรักเกี่ยวกับไซต์นี้ที่มีคุณภาพสูงคำตอบที่เกี่ยวข้องจากผู้ที่รู้จัก SH T Pete855217 Aug 30 11 at 15 05 ทำไมคุณถึงเริ่มต้นทำงานทั้งหมดเป็นโมฆะชนิดของมันคืออะไรที่ไหนประกาศมันจะทำดีถ้าคุณใส่ตัวอย่างโค้ดบางอย่างที่คล้ายคลึงกับโค้ด Java จริง ๆ คำวิจารณ์ของฉันจะเป็นดังต่อไปนี้ฟังก์ชันของคุณไม่เกินไป มากควรจะทำสิ่งหนึ่งและสิ่งหนึ่งที่เหลือเท่านั้นยิ่งไปกว่านั้นสิ่งที่เกิดขึ้นในห่วงของคุณเมื่อ x 5 คุณคัดลอกวิ่งทั้งหมด 6 เข้าวิ่ง 5 แต่แล้วคุณมีสองสำเนาของ ค่าเดียวกันที่ตำแหน่งที่ 5 และ 6 ในการออกแบบของคุณ function. moves ของคุณ shuffles รายการใน array. calculates ของคุณ total. prints สิ่งที่ผิดพลาด standard. returns total. It ไม่มากเกินไปคำแนะนำแรกของฉันไม่ได้ที่จะย้ายสิ่ง รอบในอาร์เรย์แทนใช้ circul ar บัฟเฟอร์และใช้แทนอาร์เรย์มันจะทำให้การออกแบบของคุณข้อเสนอแนะที่สองของฉันคือการทำลายลงในสิ่งที่เป็น cohesive. have โครงสร้างข้อมูลเป็นบัฟเฟอร์วงกลมที่ช่วยให้คุณสามารถเพิ่มไปและที่ลดลงรายการที่เก่าแก่ที่สุดเมื่อใดก็ตามที่มัน ถึงขีดความสามารถของมันมีโครงสร้างข้อมูลที่ใช้ interator. have ฟังก์ชันที่คำนวณจำนวนรวมใน iterator ที่คุณ don t ดูแลถ้าคุณกำลังคำนวณทั้งหมดออกจากอาร์เรย์รายการหรือ bufer. don วงกลม t เรียกว่ารวมเรียกว่าผลรวม ซึ่งเป็นสิ่งที่คุณกำลังคำนวณนั่นคือสิ่งที่ฉันทำข้อมูลดี luis แต่จำฟังก์ชันนี้เป็นส่วนเล็ก ๆ ของการทำงานของชั้นเรียนและมันจะ overkill เพื่อเพิ่มรหัสมากเกินไปเพื่อให้สมบูรณ์แบบ คุณมีความถูกต้องทางเทคนิคและฉันเข้าใจรหัสของฉันไม่มากเกินไป แต่ในขณะเดียวกันบางครั้งก็ดีกว่าที่จะผิดพลาดในด้านของรหัสที่มีขนาดเล็กชัดเจนกว่าไปเพื่อความสมบูรณ์แบบทักษะ Java ของฉันได้ทำ pseudocode คุณอธิบายเรียบเรียงจะมี ฉันเป่าฉัน งบประมาณนี้ แต่ขอขอบคุณสำหรับคำอธิบายที่ชัดเจน Pete855217 Aug 31 11 at 2 23.Hmmm มันไม่เกี่ยวกับความสมบูรณ์แบบ แต่เกี่ยวกับการปฏิบัติอุตสาหกรรมที่จัดตั้งขึ้นที่เราได้รู้ว่าสำหรับช่วง 3 ทศวรรษที่ผ่านมารหัสทำความสะอาดอยู่เสมอหนึ่งที่ถูกแบ่งพาร์ติชันเรามี ทศวรรษของหลักฐานที่ระบุว่านี่คือวิธีที่จะไปในกรณีทั่วไปในแง่ของต้นทุนที่มีประสิทธิภาพการลดข้อบกพร่องความเข้าใจ ฯลฯ เว้นแต่เป็นโยนไปรหัสสำหรับสิ่งหนึ่งครั้งของสิ่งที่มันไม่เคยเป็นค่าใช้จ่ายในการทำเช่นนี้ เมื่อเริ่มต้นการวิเคราะห์ปัญหาใด ๆ ในลักษณะนี้รหัส 101 ทำลายปัญหาและรหัสต่อไปนี้ไม่ overkill หรือยาก Aug 31 11 ที่ 15 55.Your งานของคุณง่ายเกินไปและ aproach คุณได้นำแน่นอนดีสำหรับงานอย่างไรก็ตาม ถ้าคุณต้องการใช้การออกแบบที่ดีกว่าคุณต้องกำจัดการเคลื่อนไหวจำนวนทั้งหมดที่คุณใช้คิว FIFO และใช้ประโยชน์จากวิธีการแบบ push และ pop แบบนี้ไม่ได้สะท้อนถึงการเคลื่อนไหวของข้อมูลใด ๆ ข้อมูลใหม่และลบข้อมูล olde rally เฉลี่ยเคลื่อนที่ - SMA. ค่าเฉลี่ยเคลื่อนที่แบบธรรมดาสามารถปรับแต่งได้โดยสามารถคำนวณได้สำหรับช่วงเวลาต่าง ๆ โดยการเพิ่ม ราคาปิดของการรักษาความปลอดภัยสำหรับช่วงเวลาหลายช่วงจากนั้นหารยอดรวมนี้ตามจำนวนรอบระยะเวลาซึ่งจะทำให้ราคาเฉลี่ยของการรักษาความปลอดภัยในช่วงเวลาค่าเฉลี่ยเคลื่อนที่ที่เรียบจะทำให้ความผันผวนลดลงและทำให้สามารถดูได้ง่ายขึ้น แนวโน้มราคาของการรักษาความปลอดภัยหากค่าเฉลี่ยเคลื่อนที่ขึ้นเล็กน้อยหมายความว่าราคาของระบบรักษาความปลอดภัยจะเพิ่มขึ้นหากมีการชี้ลงหมายความว่าราคาของระบบรักษาความปลอดภัยจะลดลงระยะเวลาในการเคลื่อนที่ของค่าเฉลี่ยที่ยาวนานขึ้นเรียบง่าย moving average ค่าเฉลี่ยเคลื่อนที่ระยะสั้นมีความผันผวนมากขึ้น แต่การอ่านมีความใกล้เคียงกับข้อมูลต้นฉบับความสำคัญเชิงสถิติค่าเฉลี่ยของค่าเฉลี่ยเป็นเครื่องมือวิเคราะห์ที่สำคัญที่ใช้ระบุแนวโน้มราคาปัจจุบันและ tential สำหรับการเปลี่ยนแปลงในแนวโน้มที่จัดตั้งขึ้นรูปแบบที่ง่ายที่สุดของการใช้ค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายในการวิเคราะห์กำลังใช้เพื่อระบุได้อย่างรวดเร็วว่าการรักษาความปลอดภัยอยู่ในแนวโน้มขาขึ้นหรือขาลงอีกหนึ่งเครื่องมือวิเคราะห์ที่ได้รับความนิยมแม้ว่าจะมีความซับซ้อนมากกว่าเล็กน้อยคือการเปรียบเทียบคู่ ค่าเฉลี่ยเคลื่อนที่ในระยะสั้นที่มีระยะเวลาต่างกันในแต่ละช่วงเวลาหากค่าเฉลี่ยเคลื่อนที่แบบระยะสั้นมีค่าสูงกว่าค่าเฉลี่ยระยะยาวคาดว่าแนวโน้มขาขึ้นจะเป็นไปตามที่คาดการณ์ในทางกลับกันค่าเฉลี่ยระยะยาวที่สูงกว่าค่าเฉลี่ยระยะสั้นจะส่งผลให้มีการเคลื่อนไหวลดลง รูปแบบการค้าที่เป็นที่นิยมรูปแบบการค้าที่เป็นที่นิยมซึ่งใช้ค่าเฉลี่ยเคลื่อนที่แบบง่ายๆ ได้แก่ เครื่องหมายการเสียชีวิตและเครื่องหมายกากบาทแบบกาชาดความตายเกิดขึ้นเมื่อค่าเฉลี่ยเคลื่อนที่ 50 วันที่ต่ำกว่าค่าเฉลี่ยเคลื่อนที่ 200 วันซึ่งถือเป็นสัญญาณหยาบคาย ความสูญเสียที่เกิดขึ้นในร้านโกลเด้นครอสเกิดขึ้นเมื่อค่าเฉลี่ยเคลื่อนที่ระยะสั้นอยู่เหนือเส้นค่าเฉลี่ยเคลื่อนที่ในระยะยาวเสริมด้วยปริมาณการซื้อขายที่เพิ่มขึ้น อยู่ในร้าน
Comments
Post a Comment