Naloga/Podatkovne strukture in algoritmi/Strassenovo množenje matrik/Namig (Java)

Iz MaFiRaWiki

  1. import java.util.*;
  2.  
  3. public class Matrika
  4. {
  5. int n; // velikost matrike
  6. int N; // najmanjse sodo stevilo vecje ali enako n
  7. double[][] elem;
  8. public Matrika(int n)
  9. {
  10. }
  11. public Matrika pristej(Matrika B)
  12. {
  13. return null;
  14. }
  15. public Matrika odstej(Matrika B)
  16. {
  17. return null;
  18. }
  19. public Matrika primnozi(Matrika B)
  20. {
  21. return null;
  22. }
  23. // delamo se kot da mnozimo matrike velikosti N namesto n
  24. public Matrika primnoziStrassen(Matrika B)
  25. {
  26. return null;
  27. }
  28. // vrne nakljucno matriko velikosti n.
  29. public static Matrika nakljucnaMatrika(int n)
  30. {
  31. Matrika C = new Matrika(n);
  32. for (int i=0; i<n; i++)
  33. {
  34. for (int j=0; j<n; j++)
  35. C.elem[i][j] = 1-2*Math.random();
  36. }
  37. return C;
  38. }
  39. // izpis matrike
  40. public void izpisi()
  41. {
  42. for(int i=0; i<n; i++)
  43. {
  44. for (int j=0; j<n; j++)
  45. System.out.print(this.elem[i][j] + " ");
  46. System.out.println();
  47. }
  48. }
  49. public static void main(String[] args)
  50. {
  51. int n;
  52. if (args.length == 1)
  53. n = Integer.parseInt(args[0]);
  54. else
  55. n=500;
  56. System.out.println("Konstrukcija matrik");
  57. Matrika M1 = Matrika.nakljucnaMatrika(n);
  58. Matrika M2 = Matrika.nakljucnaMatrika(n);
  59. System.out.println("Navadno mnozenje");
  60. Stoparica.start();
  61. Matrika A = M1.primnozi(M2);
  62. System.out.println("cas: " + Stoparica.poglej() + " sekund.");
  63. System.out.println("Strassenovo mnozenje");
  64. Stoparica.start();
  65. Matrika B = M1.primnoziStrassen(M2);
  66. System.out.println("cas: " + Stoparica.poglej() + " sekund.");
  67. }
  68. }
  69.  
  70. class Stoparica
  71. {
  72. static long zacetek;
  73. public static void start()
  74. {
  75. zacetek = (new GregorianCalendar()).getTimeInMillis();
  76. }
  77. public static double poglej()
  78. {
  79. long konec = (new GregorianCalendar()).getTimeInMillis();
  80. return (konec - zacetek) / 1000.0;
  81. }
  82. }
Osebna orodja