En ajoutant les éléments d'un double tableau [], sans l'aide d'une boucle en java
J'ai un double[] de taille énorme. (Ex : Eg.double[] array = new double[] {2.0, 3.1, 4.2, 8.9, 10.11, ........}
)
Je veux obtenir la somme de tous les éléments de ce tableau à la fois. (Sans l'aide d'une boucle).
Avez-vous une idée pour faire cela?
vous souhaitez ajouter des éléments en double arraybut d'où vous pourrez obtenir ces valeurs ? pouvez vous s'il vous plaît préciser
Qu'est ce qu'un tableau double? tu veux dire un tableau à deux dimensions? quel est votre type d'élément?
Qu'entendez-vous par un "tableau double" ? Un tableau de doubles
Je pense que par l'adjonction d'éléments OP signifie résumant, et non de l'ajout de nouveaux éléments dans un tableau.
oui c'est une double[] (par exemple.double tableau [] = new double[] {2.0, 3.1, 4.2, 8.9, 10.11}). Et, oui abhin4v, je veux en faisant la somme
Qu'est ce qu'un tableau double? tu veux dire un tableau à deux dimensions? quel est votre type d'élément?
Qu'entendez-vous par un "tableau double" ? Un tableau de doubles
double[]
? Ou d'une autre structure ? À faire ce que vous voulez pour ajouter les éléments ? Pouvez-vous ajouter plus d'informations à votre question ?Je pense que par l'adjonction d'éléments OP signifie résumant, et non de l'ajout de nouveaux éléments dans un tableau.
oui c'est une double[] (par exemple.double tableau [] = new double[] {2.0, 3.1, 4.2, 8.9, 10.11}). Et, oui abhin4v, je veux en faisant la somme
OriginalL'auteur Namalak | 2010-11-04
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas calculer la somme d'une liste de valeurs en une seule étape. Même si il y avait une méthode de l'API ou une bibliothèque qui offre une fonction somme, elle serait d'utiliser des boucles en interne. La complexité de la somme de l'algorithme est O(n) (pour un seul Cpu).
Un moyen de sortir pourrait être l'aide d'un calcul en parallèle, mais c'est une approche théorique pour répondre à votre question. Vous avez besoin d'au moins autant de Processeurs que les cellules de tableau pour calculer la somme sur l'étape. (Ou une fiction CPU avec autant de FP registres sous forme de tableau de valeurs).
Avant de vous commencer à regarder les API de Java ou d'autres bibliothèques:
Utilisation:
En fait la complexité de l'algorithme est O(n), même pour plusieurs Processeurs 🙂
Je parie que O(log n), O(1) peut-être pas. La pensée de l'ajout de n/2 paires de valeur dans la première étape, alors (n/2)/2 paires de montants et ainsi de suite. (traitement en parallèle)
Entrer en "parallèle gênant" Gpu! 🙂
OriginalL'auteur Andreas_D
Oui, utiliser une boucle. C'est ce qu'ils sont pour. Des centaines d'éléments est une minable petite taille pour un tableau et aura presque pas de temps pour le processus.
OriginalL'auteur paxdiablo
Tout d'abord, des "centaines" n'est pas "énorme" ('millions') et la seconde, d'ajouter les éléments sans boucle n'est pas possible à moins d'avoir une information préalable sur les éléments (comme si elles font partie d'une série en particulier).
En fait, des millions n'est pas énorme de nos jours. Des milliards est énorme.
L'addition d'une milion doubles faut ~0.003 secondes. 😀
OriginalL'auteur Abhinav Sarkar
Dans Java 8:
Et si vous voulez en parallèle sur plusieurs Processeurs:
OriginalL'auteur xierch
Je préfère l'approche suivante.
OriginalL'auteur Pradip Wawge
Une boucle est la plus simple et la plus efficace pour faire des choses comme résumant les éléments d'un tableau ou d'une collection Java.
Il existe des moyens pour faire la somme des tableaux qui n'impliquent pas explicite des boucles, mais elles nécessitent l'utilisation d' simulé des fonctions d'ordre supérieur, et ils sont compliqués et laid lorsqu'il est écrit en Java. (Et ils sont chers et l'utilisation des boucles sous le capot.)
Java n'est pas un langage de programmation fonctionnel. Si vous voulez /besoin de faire de la programmation fonctionnelle sur la plate-forme Java, l'utilisation de Scala ou Clojure.
OriginalL'auteur Stephen C
Si vous êtes vraiment intéressé, une précision, une simple boucle pourrait causer certains problèmes. Les Doubles ne contiennent pas de précision arbitraire. Voici un exemple simple pour montrer la faille de simplement en utilisant une boucle.
Nous espérons que f sera de 1 milliard de dollars, ou 1.0E9, mais au lieu de cela, nous obtenons 1.6777216E7. C'est parce que le flotteur ne peut contenir environ 6 à 7 chiffres de précision. Un double peut contenir environ 16-17 chiffres de précision ce qui signifie qu'il est moins susceptible d'avoir un problème, mais ça ne résout pas le problème.
Pour contourner ce problème, nous avons besoin de ne pas additionner deux nombres lorsqu'il y a une grande différence de magnitude entre eux. Cela peut être fait en utilisant un PriorityQueue. Nous allons prendre les 2 premiers numéros, les ajouter, puis les remettre dans la file d'attente. Lorsque la file d'attente a seulement 1 nombre de gauche, nous le retourner.
Bien sûr précision, ne viennent au coût du temps. Cela va de la boucle du montant de O(n) à O(n lg n)) pour ne pas mentionner les frais généraux des objets concernés.
Parce doubles disposent de beaucoup plus de précision que d'un flotteur, vous n'aurez probablement pas besoin d'utiliser cette information si vous avez un grand nombre de doubles (des millions/milliards de dollars) et/ou vous avez une grande différence d'ampleur entre vos numéros.
Edit:
Si tous les nombres ont environ le même ordre de grandeur, ce code permettra d'éviter le problème de l'entretenir O(n) fois. Si il y a une grande différence de grandeur entre les deux échantillons ou les numéros sont distribués d'une façon qui pourrait entraîner une grande différence de grandeur, il ne pouvait souffrir les mêmes problèmes qu'avant.
OriginalL'auteur GuiltyBystander
Si votre tableau est attribué à un DoubleMatrix1D objet du cern.colt.la matrice de la bibliothèque, vous pouvez utiliser le zSum() la méthode et il sera de retour à la somme de tous les éléments de votre tableau sans avoir à boucle
your_sum=your_array.zSum()
OriginalL'auteur Carlo
si le type de données dans votre tableau est le type d'objet Double ,pas le type de primitive double,alors vous pouvez utiliser flux dans java 8 comme ceci:
OriginalL'auteur howie
Toute personne qui a en réalité une immense tableau de doubles pourriez consulter le site du cern.colt.liste.AbstractDoubleList, qui est construite de façon à optimiser les opérations telles que l'ajout de (éléments).
Comme d'autres l'ont dit, si vous voulez la somme de tous les éléments de votre tableau, vous devez écrire une boucle.
Je suis d'accord, si vous êtes disposé à travailler exclusivement avec des primitives de tableaux. Si vous voulez quelque chose qui fonctionne comme un objet de la Liste, puis le paquet que je mentionne fait un excellent travail (je l'ai utilisé pour commuter d'un grand tableau).
OriginalL'auteur Ben Flynn
La boucle est le moyen le plus simple pour cela, mais puisque vous avez demandé pour un autre:
La récursivité:
Je n'ai pas testé, mais il devrait fonctionner quelque part le long de la ci-dessus.
EDIT: Il n'est pas recommandé d'utiliser une telle construction, puisque, pour la très vaste gamme, vous pouvez frapper la StackOverflowException très rapide.
il devrait être
d.length
...pasdouble.length
Je comprends que vous essayez d'exécuter une queue d'appel d'optimisation, bt autant que je sache, java ne le supporte pas....donc cela peut être fait avec seulement 2 paramètres.
Ouais, j'ai constaté que de moi après que je l'ai écrit. Pour beaucoup erlang dans les derniers temps. Mais je le laisser rester, puisque c'est l'exemple de code 😉
OriginalL'auteur ZeissS
Vous devez créer une classe imbriquée à l'intérieur de la fonction et l'utilisation de la récursivité à l'intérieur de la classe imbriquée pour l'ajout:
Je
OriginalL'auteur Roland S. Wilson
Amis c'est la solution parfaite que j'ai fait.Je prends condition complexe avec de la ficelle. nous pouvons utilisé directement un double tableau.
bonne journée!!!!!!!
OriginalL'auteur Pradip Wawge