Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum

introduction

Ce thème

Ce thème, la méthode des moindres carrés

Ruby (recherche complète)

C'est un peu difficile à comprendre même si vous lisez la phrase du problème, mais si vous lisez l'explication de l'exemple de sortie, * [Méthode du carré minimum -wikipedia](https://ja.wikipedia.org/wiki/%E6%9C%80%E5 Vous pouvez voir que% B0% 8F% E4% BA% 8C% E4% B9% 97% E6% B3% 95) * imagine une fonction linéaire avec une pente de «0». Tout d'abord, étant donné que la quantité de calcul est petite comme «-100 ≤ a [i] ≤ 100», elle peut être résolue franchement par une recherche complète.

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

Ruby (méthode du carré minimum)

Vient ensuite la solution mathématique. Puisque la fonction linéaire y = ax + b a un gradient ʻa = 0, alors y = b`.

Exemple d'entrée 3 a[0] a[1] a[2]
Les données 4 2 5
Carré d'erreur $(b - 4)^2$ $(b - 2)^2$ $(b - 5)^2$
(erreur cumulative au carré) = 3b ^ 2 --22b + 45

Par conséquent, le «b» qui minimise la somme cumulée des carrés des erreurs peut être obtenu. $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 (méthode-matrice de carré minimum)

Des modules énumérables tels que map effectuent des opérations séquentielles sur chaque élément, mais les matrices effectuent des opérations sur tous les éléments à la fois.

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 (recherche complète)

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)

Il semble que la variable «min» ne puisse pas être utilisée.

Python (méthode du carré minimum)

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 (méthode du carré minimum --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))))

Ce n'est qu'un usage rudimentaire.

Ruby(Recherche complète) Ruby(Méthode du carré minimum) Ruby(queue) Python(Recherche complète) Python(Méthode du carré minimum) Python(numpy)
Longueur du code 169 Byte 128 Byte 174 Byte 201 Byte 122 Byte 182 Byte
Temps d'exécution 10 ms 7 ms 17 ms 23 ms 18 ms 151 ms
Mémoire 1916 KB 1788 KB 4604 KB 2940 KB 2940 KB 12396 KB

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 107 B Manipulation de chaînes
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
Scraping avec Node, Ruby et Python
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résolu AtCoder ABC 114 C-755 avec Python3
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
RaspberryPi L Chika avec Python et C #
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
Résolution du modèle Lorenz 96 avec Julia et Python
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Résolvez AtCoder 167 avec python
Ruby, Python et carte
Python et Ruby se séparent
Benchmarks langage C, Java, Python avec factorisation prime
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Résolvez AtCoder ABC166 avec python
Bleu clair avec AtCoder @Python
[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
Python et matériel - Utilisation de RS232C avec Python -
Mandelbrot Benchmark (C, PHP, HHVM, Ruby, Python, PyPy et Kinx)
Python sur Ruby et Ruby en colère sur Python
Résoudre les mathématiques avec Python (incomplet)
Mémo tranche python et rubis
Zundokokiyoshi avec python / rubis / Lua
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
Résolution de Nampre avec Python (partie 2)