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

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

Changed index updating procedure.

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