Zustandstabelle mit javascript

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zustandstabelle mit javascript

    Hallo,

    ich komme hier einfach nicht weiter..

    Ich möchte mit Javascript eine beliebige Zustandstabelle erzeugen.
    Diese Zustandstabelle kann als verallgemeirung der boolschen Zustandstabelle betrachtet werden.
    D.h. die erste Variable der Tabelle kann z.B. drei Werte annehmen (Hoch (0), Mittel (1), Klein(2)) und
    die zweite Variabel z.B. zwei Werte (Ja (0), Nein(1)). Diese Tabelle hat dann natürlich 3*2 Zustandsspalten;

    Quellcode

    1. 0 0
    2. 0 1
    3. 1 0
    4. 1 1
    5. 2 0
    6. 2 1

    Ich erzeuge die Tabelle dynamisch mit dom-Elementen und weise den Zahlen wieder Namen zu.

    Bisher habe ich umständlich Zustandswiederholungen definert, so würde in der ersten Spalte 3*2/3 =2 wiederholungen programmieren usw.
    Leider geht das Konzept schon bei vier Variablen mit unterschiedlichen zustandvektoren nicht mehr auf.
    Einen rekursiven multidimensionalen array Ansatz habe ich versucht, aber bin gescheitert. Hier müsste mann
    wohl rekursiv die variablen-Zustandslängen umständlich in geschachtelten arrays definieren, ich kann mir aber nur schwer
    vorstellen wie ich dann daraus eine Zweidimensionale Tabelle anlege....

    Hier mein bisheriger code ...

    Quellcode

    1. directedGraph.prototype.defineCPT = function(modelNodeId) {
    2. var Parents = new Array();
    3. Parents = this.parents(modelNodeId, this.dg.Adjacent);
    4. var pLen = Parents.length;
    5. //row length of state table
    6. var rLen = 1;
    7. for (var i = 0; i< pLen; i++) {
    8. var psLen = this.dg.States[Parents[i]].length;
    9. rLen *= psLen;
    10. }
    11. if (rLen > 1) {
    12. //Define repeat pattern for the parents states
    13. var Repeat = new Array();
    14. Repeat[0] = rLen/this.dg.States[Parents[0]].length;
    15. for (var i=1; i<pLen; i++) {
    16. if (i<pLen-1) {
    17. if ( this.dg.States[Parents[i+1]].length-this.dg.States[Parents[i]].length==0) {
    18. //same statelength
    19. Repeat[i] = Repeat[i-1]/2;
    20. } else {
    21. Repeat[i] = this.dg.States[Parents[i+1]].length;
    22. }
    23. } else {
    24. Repeat[i] = 1;
    25. }
    26. }
    27. //buildolumn vectors with states
    28. var Column = new Array();
    29. var l = 0;
    30. for (var i = 0; i < pLen; i++) {
    31. while (l < rLen) {
    32. for (var j=0; j < this.dg.States[Parents[i]].length; j++) {
    33. for (var k=0; k < Repeat[i]; k++ ) {
    34. Column.push(j);
    35. l+=1;
    36. }
    37. }
    38. }
    39. l=0;
    40. }
    41. //Build row vectors
    42. var stateTableCpt = new Array();
    43. for (var j=0; j<rLen; j++) {
    44. stateTableCpt[j] = new Array(pLen);
    45. for (var k=0; k<pLen; k++) {
    46. stateTableCpt[j][k] = Column[(k*rLen)+j];
    47. }
    48. }
    49. return stateTableCpt;
    50. } else {
    51. return 0;
    52. }
    53. }
    Alles anzeigen


    Freue mich über jeden möglichen Gedankenansatz...

    Gruß,
    Jhab