Je cherchais un problème d'algorithmes pour déterminer max_stock_profit quand on me donnait un tableau des prix des actions. J'essayais de déterminer la complexité temporelle de cette méthode, et j'ai rencontré un .min
utilisé sur un tableau dans la méthode each
. Cela m'a conduit à poser la question intitulée dans ce post.
De façon générale, quand on regarde simplement à la méthode .min
ou .max
sur un tableau de longueur 1.000.000 par exemple, ne serait pas en cours d'exécution ou .min
.max
sur la matrice linéaire besoin de temps en O (n) pour déterminer une valeur minimum ou maximum, où n est la longueur du tableau? ..
Si oui, en fonction du code d'exemple ci-dessous, en exécutant .min
ou .max
méthode dans une méthode each
, ne serait pas la complexité du temps O (n^2) puisqu'il doit exécuter une autre itération dans la méthode each
pour déterminer la valeur min? Je pense que l'extrait de code devrait fonctionner à l'heure O (n), mais mon manque de compréhension de la façon dont fonctionne .min
et .max
est ce qui cause une grande confusion. Est-ce parce que .min
est invoqué sur un tableau contenant seulement 2 valeurs, il est normal que cette ligne de code fonctionne en temps constant O (1)? Toute aide pour effacer mon incompréhension de ce qui se passe serait appréciée. Merci.
Exemple extrait de code:
stock_prices = [5, 7, 2 ,4, 9, 1, 8]
min_price = stock_prices[0]
max_profit = 0
stock_prices.each do |current_price|
min_price = [min_price, current_price].min
potential_profit = current_price - min_price
max_profit = [max_profit, potential_profit].max
end
Que fait-on avec le 'etc ...'? Cela peut être pertinent pour la raison pour laquelle la personne qui a écrit ceci n'a pas simplement dit 'min_price = stock_prices.min'. Par exemple, c'est peut-être un processus séquentiel et la logique est fondée sur le cours de bourse le plus bas observé jusqu'ici. – pjs
oui c'est un processus séquentiel et est basé sur le prix de l'action le plus bas en comparant le prix min initial et le prix actuel. Mais je suis confus quant à la complexité temporelle de cet extrait de code, en particulier lors de l'implémentation de .min et .max dans la méthode .each. Je pensais en utilisant .min, il nécessite une autre itération dans .each, ce qui me conduit à croire que la complexité du temps prend plus de temps que O (n)? –
Je crois que le code est ici O (n), c'est linéaire sur la base de la longueur des cours des actions – stujo