Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode

Einführung

Dieses Thema

Dieses Thema ist die Methode der kleinsten Quadrate

Ruby (vollständige Suche)

Es ist ein wenig schwer zu verstehen, selbst wenn Sie die Problemstellung lesen, aber wenn Sie die Erklärung des Ausgabebeispiels lesen, * [Minimum square method -wikipedia](https://ja.wikipedia.org/wiki/%E6%9C%80%E5 Sie können sehen, dass% B0% 8F% E4% BA% 8C% E4% B9% 97% E6% B3% 95) * sich eine lineare Funktion mit einer Steigung von "0" vorstellt. Erstens, da der Rechenaufwand so klein wie "-100 ≤ a [i] ≤ 100" ist, kann er offen durch vollständige Suche gelöst werden.

ruby.rb


n = gets.to_i
a = gets.split.map(&:to_i)
min = Float::INFINITY
a.min.upto(a.max) do |x|
  b = a.map{|y| (x - y) ** 2}.inject(:+)
  min = b if min > b
end
puts min

Rubin (Minimum-Quadrat-Methode)

Als nächstes kommt die mathematische Lösung. Da die lineare Funktion "y = ax + b" eine Steigung von "a = 0" hat, ist "y = b".

Eingabebeispiel 3 a[0] a[1] a[2]
Daten 4 2 5
Fehlerquadrat $(b - 4)^2$ $(b - 2)^2$ $(b - 5)^2$
(kumulativer Fehler im Quadrat) = 3b ^ 2 - 22b + 45

Daher kann das "b" erhalten werden, das die kumulative Summe der Quadrate der Fehler minimiert. $b = 22 / 2 / 3$

ruby.rb


n = gets.to_i
a = gets.split.map(&:to_i)
b = (a.inject(:+).to_f / n).round
min = a.map{|x| (x - b) ** 2}.inject(:+)
puts min

Ruby (Minimum Square Method-Matrix)

Aufzählbare Module wie Map führen sequentielle Operationen für jedes Element aus, Matrizen führen jedoch Operationen für alle Elemente gleichzeitig aus.

ruby.rb


require 'matrix'

n = gets.to_f
a = Matrix[(gets.split.map(&:to_i))]
b = (a.inject(:+) / n).round
min = a - Matrix[(Array.new(n, b))]
puts (min * min.row_vectors[0])[0]

Python (vollständige Suche)

python.py


import sys

n = int(input())
a = list(map(int, input().split()))
m = sys.maxsize
for x in range(min(a), max(a) + 1):
    b = sum([(x - y) ** 2 for y in a])
    if m > b:
        m = b
print(m)

Es scheint, dass die Variable "min" nicht verwendet werden kann.

Python (Minimum Square Methode)

python.py


n = int(input())
a = list(map(int, input().split()))
b = round(sum(a) / n)
m = sum([(x - b) ** 2 for x in a])
print(m)

Python (Minimum Square Methode --numpy)

numpy.py


import numpy as np

n = int(input())
a = np.array([list(map(int, input().split()))], dtype = np.int32)
b = np.around(np.sum(a) / n)
m = a - b
print(int(np.sum(np.power(m, 2))))

Es ist nur eine rudimentäre Verwendung.

Ruby(Volle Suche) Ruby(Minimum-Quadrat-Methode) Ruby(Warteschlange) Python(Volle Suche) Python(Minimum-Quadrat-Methode) Python(numpy)
Codelänge 169 Byte 128 Byte 174 Byte 201 Byte 122 Byte 182 Byte
Ausführungszeit 10 ms 7 ms 17 ms 23 ms 18 ms 151 ms
Erinnerung 1916 KB 1788 KB 4604 KB 2940 KB 2940 KB 12396 KB

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby und Python AtCoder ABC057 C Zerlegung des Primfaktors Bit vollständige Suche
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
Lösen mit Ruby, Perl, Java und Python AtCoder AGC 033 Eine Suche mit Breitenpriorität
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
Scraping mit Node, Ruby und Python
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
AtCoder ABC 114 C-755 mit Python3 gelöst
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
RaspberryPi L Chika mit Python und C #
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
Lösen des Lorenz 96-Modells mit Julia und Python
Fordern Sie AtCoder (ABC) 164 mit Python heraus! A ~ C Problem
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Löse AtCoder 167 mit Python
Ruby, Python und Map
Python und Ruby teilen sich
C-Sprache, Java, Python-Benchmarks mit Primfaktorisierung
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Versionsverwaltung von Node, Ruby und Python mit anyenv
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Löse AtCoder ABC166 mit Python
Hellblau mit AtCoder @Python
[AtCoder Erklärung] Kontrollieren Sie ABC180 A, B, C Probleme mit Python!
Python und Hardware-Verwenden von RS232C mit Python-
Mandelbrot-Benchmark (C, PHP, HHVM, Ruby, Python, PyPy und Kinx)
Python auf Ruby und wütend Ruby auf Python
Mathematik mit Python lösen (unvollständig)
Python und Ruby Slice Memo
Zundokokiyoshi mit Python / Rubin / Lua
[AtCoder Erklärung] Kontrollieren Sie ABC158 A, B, C Probleme mit Python!
Nampre mit Python lösen (Teil 2)