Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. package net.coderodde.stat;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. public class StandardDeviationNumberSet {
  7.  
  8. private double sum;
  9. private double squareSum;
  10. private int numberOfElements;
  11. private final Map<Double, Integer> countMap = new HashMap<>();
  12.  
  13. public void add(Number number) {
  14. double numberValue = number.doubleValue();
  15. Integer count = countMap.get(numberValue);
  16.  
  17. if (count != null) {
  18. countMap.put(numberValue, count + 1);
  19. } else {
  20. countMap.put(numberValue, 1);
  21. }
  22.  
  23. sum += numberValue;
  24. squareSum += numberValue * numberValue;
  25. numberOfElements++;
  26. }
  27.  
  28. public double remove(Number number) {
  29. double numberValue = number.doubleValue();
  30. Integer count = countMap.get(numberValue);
  31.  
  32. if (count != null) {
  33. if (count > 1) {
  34. countMap.put(numberValue, count - 1);
  35. } else {
  36. countMap.remove(numberValue);
  37. }
  38.  
  39. sum -= numberValue;
  40. squareSum -= numberValue * numberValue;
  41. numberOfElements--;
  42. return numberValue;
  43. } else {
  44. return Double.NaN;
  45. }
  46. }
  47.  
  48. public double getStandardDeviation() {
  49. checkSetHasAtleastTwoElements();
  50. double step1 = squareSum - sum * sum / numberOfElements;
  51. double step2 = step1 / (numberOfElements - 1);
  52. return Math.sqrt(step2);
  53. }
  54.  
  55. private void checkSetHasAtleastTwoElements() {
  56. if (numberOfElements < 2) {
  57. throw new IllegalStateException(
  58. "Computing the standard deviation requires at least two " +
  59. "elements.");
  60. }
  61. }
  62.  
  63. public static void main(String[] args) {
  64. StandardDeviationNumberSet set = new StandardDeviationNumberSet();
  65.  
  66. set.add(1);
  67. set.add(1);
  68. set.add(3);
  69.  
  70. System.out.println(set.getStandardDeviation());
  71.  
  72. set.remove(1);
  73.  
  74. System.out.println(set.getStandardDeviation());
  75. }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement