KursblockungMatrix.d.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { JavaObject } from '../../java/lang/JavaObject';
  2. export declare class KursblockungMatrix extends JavaObject {
  3. private readonly RND;
  4. private readonly matrix;
  5. private readonly rows;
  6. private readonly cols;
  7. private readonly permR;
  8. private readonly permC;
  9. private readonly r2c;
  10. private readonly c2r;
  11. private readonly besuchtR;
  12. private readonly abgearbeitetC;
  13. private readonly vorgaengerCzuR;
  14. private readonly queueR;
  15. private readonly potentialR;
  16. private readonly potentialC;
  17. private readonly distanzC;
  18. /**
  19. * Erzeugt eine neue Matrix mit {@code rows} Zeilen und {@code cols} Spalten.
  20. *
  21. * @param rows Die Anzahl der Zeilen der Matrix.
  22. * @param cols Die Anzahl der Spalten der Matrix.
  23. */
  24. constructor(rows: number, cols: number);
  25. /**
  26. * Berechnet zur aktuellen Matrix ein maximales bipartites Matching. Die Methode
  27. * geht davon aus, dass in der Matrix ausschließlich die Werte 0 und 1
  28. * vorkommen. Werte ungleich 0 werden andernfalls als 1 (eine Kante im Graphen)
  29. * interpretiert. Nichtquadratische Matrizen sind erlaubt. Das Ergebnis der
  30. * Methode ist eine größtmögliche Zeilen- zu Spaltenzuordnung. Der Algorithmus
  31. * hat eine Laufzeit von O(n³).
  32. *
  33. * @param nichtdeterministisch definiert, ob das Ergebnis zufällig sein soll,
  34. * falls es mehrere optimale Lösungen gibt.
  35. *
  36. * @return die Zeilen- zu Spaltenzuordnung, negative Werte entsprechen einer
  37. * Nichtzuordnung.
  38. */
  39. gibMaximalesBipartitesMatching(nichtdeterministisch: boolean): Array<number>;
  40. /**
  41. * Berechnet zur aktuellen Matrix ein minimales gewichtetes Matching. Die
  42. * Methode geht davon aus, dass in der Matrix ganzzahlige Werte vorkommen, d.h.
  43. * es existiert eine Kante von jedem linken Knoten zu jedem rechten Knoten.
  44. * Negative Werte und nichtquadratische Matrizen sind erlaubt. Zur Berechnung
  45. * eines maximalen Matching kann man vorher alle Zellenwerte negieren. Das
  46. * Ergebnis der Methode ist eine Zeilen- zu Spaltenzuordnung, deren Summe
  47. * minimal ist. Der Algorithmus verwendet mehrere Runden eines SSSP-Algorithmus
  48. * (Dijkstra). Damit dies bei negativen Werten funktioniert, werden die Kanten
  49. * mit Hilfe von Knoten-Potentialen umgewichtet. Der Algorithmus hat eine
  50. * Laufzeit von O(n³).
  51. *
  52. * @see <a href= "https://en.wikipedia.org/wiki/Shortest_path_problem">Wikipedia
  53. * - Shortest_path_problem</a>
  54. *
  55. * @see <a href= "https://en.wikipedia.org/wiki/Johnson%27s_algorithm">Wikipedia
  56. * - Johnsons Algorithm</a>
  57. *
  58. * @param nichtdeterministisch definiert, ob das Ergebnis zufällig sein soll,
  59. * falls es mehrere optimale Lösungen gibt.
  60. *
  61. * @return die Zeilen- zu Spaltenzuordnung, negative Werte entsprechen einer
  62. * Nichtzuordnung.
  63. */
  64. gibMinimalesBipartitesMatchingGewichtet(nichtdeterministisch: boolean): Array<number>;
  65. /**
  66. * Interne Methode zum Permutieren oder Initialisieren der Arrays
  67. * {@link KursblockungMatrix#permR} und {@link KursblockungMatrix#permC}.
  68. *
  69. * @param nichtdeterministisch falls {@code true} werden
  70. * {@link KursblockungMatrix#permR} und
  71. * {@link KursblockungMatrix#permC} permutiert,
  72. * sonst initialisiert.
  73. */
  74. private initialisierPermRundPermC;
  75. /**
  76. * Interne Methode zum Initialisieren eines Arrays so, dass das Array mit den
  77. * Zahlen {@code 0,1,2...} gefüllt wird.
  78. *
  79. * @param perm Das Array, welches mit den Zahlen {@code 0,1,2...} gefüllt wird.
  80. */
  81. private static initialisiere;
  82. /**
  83. * Interne Methode zum zufälligen Permutieren eines Arrays.
  84. *
  85. * @param perm Das Array, dessen Inhalt zufällig permutiert wird.
  86. */
  87. private permutiere;
  88. /**
  89. * Erlaubt Zugriff auf den Inhalt des Arrays.
  90. *
  91. * @return Die Array-Referenz.
  92. */
  93. getMatrix(): Array<Array<number>>;
  94. /**
  95. * Erzeugt String-Ausgabe des Arrays sowie der Zeilen-zu-Spalten-Zuordnung
  96. * {@link KursblockungMatrix#r2c}. Diese Methode ist für Debug-Zwecke gedacht.
  97. *
  98. * @param kommentar Ein Kommentar der über der Matrix angezeigt wird.
  99. * @param zellenbreite Die Breite bei der Ausgabe der Zelle.
  100. * @param mitKnotenPotential Falls {@code true}, werden die Kantenwerte
  101. * umgewichtet entsprechenden der Knotenpotentiale,
  102. * andernfalls bleiben die Kantenwerte unverändert.
  103. *
  104. * @return Eine String-Representation der Matrix.
  105. */
  106. convertToString(kommentar: String, zellenbreite: number, mitKnotenPotential: boolean): String;
  107. /**
  108. * Füllt die Matrix mit ganzzahligen zufälligen Zahlenwerten aus dem Intervall
  109. * {@code [von;bis]}.
  110. *
  111. * @param von Der kleinstmögliche zufällige Wert (inklusive).
  112. * @param bis Der größtmögliche zufällige Wert (inklusive).
  113. */
  114. fuelleMitZufallszahlenVonBis(von: number, bis: number): void;
  115. isTranspiledInstanceOf(name: string): boolean;
  116. }
  117. export declare function cast_de_nrw_schule_svws_core_kursblockung_KursblockungMatrix(obj: unknown): KursblockungMatrix;