source: branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/NumberSequence.java @ 1650

Last change on this file since 1650 was 1650, checked in by rkrimmel, 10 years ago

Fixed bug where containPattern didn't handle gaps correctly

File size: 2.7 KB
RevLine 
[1553]1package de.ugoe.cs.autoquest.tasktrees.alignment.algorithms;
[1450]2
[1618]3import java.util.ArrayList;
[1621]4import java.util.LinkedList;
[1568]5import java.util.Random;
[1450]6
[1618]7public class NumberSequence {
[1450]8        private int[] sequence;
[1620]9        private int id;
[1618]10
[1620]11
[1450]12        public NumberSequence(int size) {
[1618]13
[1450]14                sequence = new int[size];
15        }
[1620]16       
[1450]17        public int[] getSequence() {
18                return sequence;
19        }
[1618]20
[1450]21        public void setSequence(int[] sequence) {
22                this.sequence = sequence;
23        }
[1618]24
[1620]25       
[1618]26
27        public void printSequence() {
[1558]28                for (int i = 0; i < sequence.length; i++) {
[1559]29                        System.out.format("%5d", sequence[i]);
[1558]30                }
31                System.out.println();
32        }
[1618]33
34        public NumberSequence shuffle() {
[1568]35                NumberSequence result = new NumberSequence(sequence.length);
[1620]36                result.setId(getId());
[1568]37                result.setSequence(this.sequence);
38                Random rgen = new Random();
[1618]39
40                for (int i = 0; i < result.sequence.length; i++) {
41                        int randomPosition = rgen.nextInt(result.sequence.length);
42                        int temp = result.sequence[i];
43                        result.sequence[i] = result.sequence[randomPosition];
44                        result.sequence[randomPosition] = temp;
[1568]45                }
46                return result;
[1618]47
[1568]48        }
[1450]49
[1650]50        //Searching occurrences of
[1621]51        public LinkedList<Integer> containsPattern(Match pattern) {
52                LinkedList<Integer> result = new LinkedList<Integer>();
[1618]53                int i = 0;
[1620]54                int[] pat1 = pattern.getFirstSequence().getSequence();
55                int[] pat2 = pattern.getSecondSequence().getSequence();
[1618]56                notmatched: while (i < sequence.length - pat1.length) {
57                        if (sequence[i] == pat1[0] || sequence[i] == pat2[0]) {
[1620]58                                int ipat1 =0;
59                                int ipat2 =0;
[1650]60                                int optcount1 = 0;
61                                int optcount2 = 0;
[1620]62                                while(ipat1 < pat1.length && ipat2<pat2.length) {
63                                        if(pat1[ipat1]==-1) {
64                                                ipat1++;
[1650]65                                                optcount1++;
[1620]66                                                continue;
67                                        }
68                                        if(pat2[ipat2]==-1) {
69                                                ipat2++;
[1650]70                                                optcount2++;
[1620]71                                                continue;
72                                        }
[1650]73                                        if (sequence[i + ipat1-optcount1] != pat1[ipat1]
74                                                        && sequence[i + ipat2-optcount2] != pat2[ipat2]) {
[1619]75                                                i++;
[1650]76                                                //System.out.println(sequence[i+ipat1] + " != " + pat1[ipat1] + " || " + sequence[i+ipat2] + " != " + pat2[ipat2]);
[1618]77                                                continue notmatched;
78                                        }
[1620]79                                        ipat1++;
80                                        ipat2++;
[1618]81                                }
[1621]82                                result.add(i);
[1618]83                        }
84                        i++;
85                }
[1621]86                return result;
[1618]87        }
[1620]88       
89        //Returns the number of times event occurs in this sequence
90        public int eventCount(int event) {
91                int count = 0;
92                for(int i=0;i<sequence.length;i++) {
93                        if(sequence[i] == event) {
94                                count++;
95                        }
96                }
97                return count;
98        }
[1618]99
[1592]100        public int size() {
101                return sequence.length;
102        }
[1620]103
104
105        public int getId() {
106                return id;
107        }
108
109
110        public void setId(int id) {
111                this.id = id;
112        }
[1621]113       
114        public boolean equals(NumberSequence n) {
115                int[] seq = n.getSequence();
116                if(n.size() !=this.size()) {
117                        return false;
118                }
119                for (int i=0; i<n.size();i++) {
120                        if(seq[i] != this.sequence[i]) {
121                                return false;
122                        }
123                }
124                return true;
125        }
126       
127       
[1450]128}
Note: See TracBrowser for help on using the repository browser.