Ayuda con subcadenas binarias
Publicado por FRANCISCO (1 intervención) el 30/10/2013 00:20:07
bueno,
Yo antes tenía una secuencia binaria y mi objetivo era la creación de sub-cadenas de diferentes longitudes, por ejemplo, la longitud 4:
Secuencia
1 (1), 0 (2), 1 (3), 1 (4), 0 (5), 0 (6), 1 (7), 0 (8), 0 (9), 1 (10), 1 (11), 1 (12),
1 (13), 0 (14), 0 (15), 0 (16), 1 (17), 1 (18), 1 (19), 0 (20)
Subcadenas
01: 1 (01) 0 (02) 1 (03) 1 (04) -> [1,0,1,1],
02: 1 (01) 1 (03) 0 (05) 1 (07) -> [1,1,0,1],
03: 1 (01) 1 (04) 1 (07) 1 (10) -> [1,1,1,1],
04: 1 (01) 0 (05) 0 (09) 1 (13) -> [1,0,0,1],
05: 1 (01) 0 (06) 1 (11) 0 (16) -> [1,0,1,0],
06: 1 (01), 1 (07), 1 (13), 1 (19) -> [1,1,1,1],
07: 0 (02) 1 (03) 1 (04) 0 (05) -> [0,1,1,0],
08: 0 (02) 1 (04) 0 (06) 0 (08) -> [0,1,0,0],
09: 0 (02) 0 (05) 0 (08) 1 (11) -> [0,0,0,1],
10: 0 (02) 0 (06) 1 (10) 0 (14) -> [0,0,1,0],
11: 0 (02), 1 (07), 1 (12), 1 (17) -> [0,1,1,1],
12: 0 (02) 0 (08) 0 (14) 0 (20) -> [0,0,0,0],
13: 1 (03) 1 (04) 0 (05) 0 (06) -> [1,1,0,0],
14: 1 (03) 0 (05) 1 (07) 0 (09) -> [1,0,1,0],
15: 1 (03) 0 (06) 0 (09) 1 (12) -> [1,0,0,1],
16: 1 (03) 1 (07) 1 (11) 0 (15) -> [1,1,1,0],
17: 1 (03), 0 (08), 1 (13), 1 (18) -> [1,0,1,1],
18: 1 (04) 0 (05) 0 (06) 1 (07) -> [1,0,0,1],
19: 1 (04) 0 (06) 0 (08) 1 (10) -> [1,0,0,1],
20: 1 (04) 1 (07) 1 (10) 1 (13) -> [1,1,1,1],
21: 1 (04) 0 (08) 1 (12) 0 (16) -> [1,0,1,0],
22: 1 (04) 0 (09) 0 (14) 1 (19) -> [1,0,0,1],
23: 0 (05) 0 (06) 1 (07) 0 (08) -> [0,0,1,0],
24: 0 (05) 1 (07) 0 (09) 1 (11) -> [0,1,0,1],
25: 0 (05) 0 (08) 1 (11) 0 (14) -> [0,0,1,0],
26: 0 (05) 0 (09) 1 (13) 1 (17) -> [0,0,1,1],
27: 0 (05) 1 (10) 0 (15) 0 (20) -> [0,1,0,0],
28: 0 (06) 1 (07) 0 (08) 0 (09) -> [0,1,0,0],
29: 0 (06) 0 (08) 1 (10) 1 (12) -> [0,0,1,1],
30: 0 (06) 0 (09) 1 (12) 0 (15) -> [0,0,1,0],
31: 0 (06), 1 (10), 0 (14), 1 (18) -> [0,1,0,1],
32: 1 (07) 0 (08) 0 (09) 1 (10) -> [1,0,0,1],
33: 1 (07) 0 (09) 1 (11) 1 (13) -> [1,0,1,1],
34: 1 (07), 1 (10), 1 (13), 0 (16) -> [1,1,1,0],
35: 1 (07), 1 (11), 0 (15), 1 (19) -> [1,1,0,1],
36: 0 (08) 0 (09) 1 (10) 1 (11) -> [0,0,1,1],
37: 0 (08), 1 (10), 1 (12), 0 (14) -> [0,1,1,0],
38: 0 (08), 1 (11), 0 (14), 1 (17) -> [0,1,0,1],
39: 0 (08), 1 (12), 0 (16), 0 (20) -> [0,1,0,0],
40: 0 (09), 1 (10), 1 (11), 1 (12) -> [0,1,1,1],
41: 0 (09), 1 (11), 1 (13), 0 (15) -> [0,1,1,0],
42: 0 (09), 1 (12), 0 (15), 1 (18) -> [0,1,0,1],
43: 1 (10), 1 (11), 1 (12), 1 (13) -> [1,1,1,1],
44: 1 (10), 1 (12), 0 (14), 0 (16) -> [1,1,0,0],
45: 1 (10), 1 (13), 0 (16), 1 (19) -> [1,1,0,1],
46: 1 (11), 1 (12), 1 (13), 0 (14) -> [1,1,1,0],
47: 1 (11), 1 (13), 0 (15), 1 (17) -> [1,1,0,1],
48: 1 (11), 0 (14), 1 (17), 0 (20) -> [1,0,1,0],
49: 1 (12), 1 (13), 0 (14), 0 (15) -> [1,1,0,0],
50: 1 (12), 0 (14), 0 (16), 1 (18) -> [1,0,0,1],
51: 1 (13), 0 (14), 0 (15), 0 (16) -> [1,0,0,0],
52: 1 (13), 0 (15), 1 (17), 1 (19) -> [1,0,1,1],
53: 0 (14), 0 (15), 0 (16), 1 (17) -> [0,0,0,1],
54: 0 (14), 0 (16), 1 (18), 0 (20) -> [0,0,1,0],
55: 0 (15), 0 (16), 1 (17), 1 (18) -> [0,0,1,1],
56: 0 (16), 1 (17), 1 (18), 1 (19) -> [0,1,1,1],
57: 1 (17), 1 (18), 1 (19), 0 (20) -> [1,1,1,0],
con el siguiente código
N = 20;
n = 4;
A = hankel(1:N-n+1,N-n+1:N);
k = 0:n-1;
c = ceil((N - A(:,end) + 1)/k(end));
i2 = cumsum(c);
i1 = i2 - c + 1;
idx = zeros(i2(end),n);
for jj = 1:N-n+1
idx(i1(jj):i2(jj),:) = bsxfun(@plus,A(jj,:),(0:c(jj)-1)'*k);
end
[j1,j2,j2] = unique(s(idx),'rows')
out = [j1, histc(j2,1:max(j2))/i2(end)];
y al final obtener un recuento de las veces que se repite cada patrón y su frecuencia relativa:
0 0 0 0 ------ 161.697 - 0,0606515378844711
0 0 0 1 ------ 163.593 - 0,0613627156789197
0 0 1 0 ------ 164.201 - 0,0615907726931733
0 0 1 1 ------ 166.680 - 0,0625206301575394
0 1 0 0 ------ 164.105 - 0,0615547636909227
0 1 0 1 ------ 166.501 - 0,0624534883720930
0 1 1 0 ------ 167.099 - 0,0626777944486122
0 1 1 1 ------ 168 835 - 0,0633289572393098
1 0 0 0 ------ 164.086 - 0,0615476369092273
1 0 0 1 ------ 166.963 - 0,0626267816954239
1 0 1 0 ------ 166.931 - 0,0626147786946737
1 0 1 1 ------ 169 470 - 0,0635671417854464
1 1 0 0 ------ 166.622 - 0,0624988747186797
1 1 0 1 ------ 169.326 - 0,0635131282820705
1 1 1 0 ------ 169 251 - 0,0634849962490623
1 1 1 1 ------ 170 640 - 0,0640060015003751
El problema que se plantea es que cuando procesaba esta manera sólo procesa unos 4.000 datos y la necesidad de procesar muchos más. Tengo 4 GB de RAM y Matlab 2012. Lo que pensé es: Asignar a cada cliente un entero:
0 0 0 0------ 1
0 0 0 1-------2
0 0 1 0-------3
0 0 1 1-------4
0 1 0 0-------5
0 1 0 1-------6
0 1 1 0-------7
0 1 1 1-------8
1 0 0 0-------9
1 0 0 1-------10
1 0 1 0-------11
1 0 1 1-------12
1 1 0 0-------13
1 1 0 1-------14
1 1 1 0-------15
1 1 1 1-------16
y se establece como un contador para asignar el número de veces que se repite ese entero. De esta manera, tal vez conseguir muchas procesamiento de datos.
¿Como podria realizar esto y que mi ordenador fuera capaz de hacer el recuento? Sólo necesito el recuento, las subcadenas generadas no es necesario almacenarlas pero el patron y el numero de veces que se ha repetido ese patron si es necesario almacenarla.
Muchas gracias
Yo antes tenía una secuencia binaria y mi objetivo era la creación de sub-cadenas de diferentes longitudes, por ejemplo, la longitud 4:
Secuencia
1 (1), 0 (2), 1 (3), 1 (4), 0 (5), 0 (6), 1 (7), 0 (8), 0 (9), 1 (10), 1 (11), 1 (12),
1 (13), 0 (14), 0 (15), 0 (16), 1 (17), 1 (18), 1 (19), 0 (20)
Subcadenas
01: 1 (01) 0 (02) 1 (03) 1 (04) -> [1,0,1,1],
02: 1 (01) 1 (03) 0 (05) 1 (07) -> [1,1,0,1],
03: 1 (01) 1 (04) 1 (07) 1 (10) -> [1,1,1,1],
04: 1 (01) 0 (05) 0 (09) 1 (13) -> [1,0,0,1],
05: 1 (01) 0 (06) 1 (11) 0 (16) -> [1,0,1,0],
06: 1 (01), 1 (07), 1 (13), 1 (19) -> [1,1,1,1],
07: 0 (02) 1 (03) 1 (04) 0 (05) -> [0,1,1,0],
08: 0 (02) 1 (04) 0 (06) 0 (08) -> [0,1,0,0],
09: 0 (02) 0 (05) 0 (08) 1 (11) -> [0,0,0,1],
10: 0 (02) 0 (06) 1 (10) 0 (14) -> [0,0,1,0],
11: 0 (02), 1 (07), 1 (12), 1 (17) -> [0,1,1,1],
12: 0 (02) 0 (08) 0 (14) 0 (20) -> [0,0,0,0],
13: 1 (03) 1 (04) 0 (05) 0 (06) -> [1,1,0,0],
14: 1 (03) 0 (05) 1 (07) 0 (09) -> [1,0,1,0],
15: 1 (03) 0 (06) 0 (09) 1 (12) -> [1,0,0,1],
16: 1 (03) 1 (07) 1 (11) 0 (15) -> [1,1,1,0],
17: 1 (03), 0 (08), 1 (13), 1 (18) -> [1,0,1,1],
18: 1 (04) 0 (05) 0 (06) 1 (07) -> [1,0,0,1],
19: 1 (04) 0 (06) 0 (08) 1 (10) -> [1,0,0,1],
20: 1 (04) 1 (07) 1 (10) 1 (13) -> [1,1,1,1],
21: 1 (04) 0 (08) 1 (12) 0 (16) -> [1,0,1,0],
22: 1 (04) 0 (09) 0 (14) 1 (19) -> [1,0,0,1],
23: 0 (05) 0 (06) 1 (07) 0 (08) -> [0,0,1,0],
24: 0 (05) 1 (07) 0 (09) 1 (11) -> [0,1,0,1],
25: 0 (05) 0 (08) 1 (11) 0 (14) -> [0,0,1,0],
26: 0 (05) 0 (09) 1 (13) 1 (17) -> [0,0,1,1],
27: 0 (05) 1 (10) 0 (15) 0 (20) -> [0,1,0,0],
28: 0 (06) 1 (07) 0 (08) 0 (09) -> [0,1,0,0],
29: 0 (06) 0 (08) 1 (10) 1 (12) -> [0,0,1,1],
30: 0 (06) 0 (09) 1 (12) 0 (15) -> [0,0,1,0],
31: 0 (06), 1 (10), 0 (14), 1 (18) -> [0,1,0,1],
32: 1 (07) 0 (08) 0 (09) 1 (10) -> [1,0,0,1],
33: 1 (07) 0 (09) 1 (11) 1 (13) -> [1,0,1,1],
34: 1 (07), 1 (10), 1 (13), 0 (16) -> [1,1,1,0],
35: 1 (07), 1 (11), 0 (15), 1 (19) -> [1,1,0,1],
36: 0 (08) 0 (09) 1 (10) 1 (11) -> [0,0,1,1],
37: 0 (08), 1 (10), 1 (12), 0 (14) -> [0,1,1,0],
38: 0 (08), 1 (11), 0 (14), 1 (17) -> [0,1,0,1],
39: 0 (08), 1 (12), 0 (16), 0 (20) -> [0,1,0,0],
40: 0 (09), 1 (10), 1 (11), 1 (12) -> [0,1,1,1],
41: 0 (09), 1 (11), 1 (13), 0 (15) -> [0,1,1,0],
42: 0 (09), 1 (12), 0 (15), 1 (18) -> [0,1,0,1],
43: 1 (10), 1 (11), 1 (12), 1 (13) -> [1,1,1,1],
44: 1 (10), 1 (12), 0 (14), 0 (16) -> [1,1,0,0],
45: 1 (10), 1 (13), 0 (16), 1 (19) -> [1,1,0,1],
46: 1 (11), 1 (12), 1 (13), 0 (14) -> [1,1,1,0],
47: 1 (11), 1 (13), 0 (15), 1 (17) -> [1,1,0,1],
48: 1 (11), 0 (14), 1 (17), 0 (20) -> [1,0,1,0],
49: 1 (12), 1 (13), 0 (14), 0 (15) -> [1,1,0,0],
50: 1 (12), 0 (14), 0 (16), 1 (18) -> [1,0,0,1],
51: 1 (13), 0 (14), 0 (15), 0 (16) -> [1,0,0,0],
52: 1 (13), 0 (15), 1 (17), 1 (19) -> [1,0,1,1],
53: 0 (14), 0 (15), 0 (16), 1 (17) -> [0,0,0,1],
54: 0 (14), 0 (16), 1 (18), 0 (20) -> [0,0,1,0],
55: 0 (15), 0 (16), 1 (17), 1 (18) -> [0,0,1,1],
56: 0 (16), 1 (17), 1 (18), 1 (19) -> [0,1,1,1],
57: 1 (17), 1 (18), 1 (19), 0 (20) -> [1,1,1,0],
con el siguiente código
N = 20;
n = 4;
A = hankel(1:N-n+1,N-n+1:N);
k = 0:n-1;
c = ceil((N - A(:,end) + 1)/k(end));
i2 = cumsum(c);
i1 = i2 - c + 1;
idx = zeros(i2(end),n);
for jj = 1:N-n+1
idx(i1(jj):i2(jj),:) = bsxfun(@plus,A(jj,:),(0:c(jj)-1)'*k);
end
[j1,j2,j2] = unique(s(idx),'rows')
out = [j1, histc(j2,1:max(j2))/i2(end)];
y al final obtener un recuento de las veces que se repite cada patrón y su frecuencia relativa:
0 0 0 0 ------ 161.697 - 0,0606515378844711
0 0 0 1 ------ 163.593 - 0,0613627156789197
0 0 1 0 ------ 164.201 - 0,0615907726931733
0 0 1 1 ------ 166.680 - 0,0625206301575394
0 1 0 0 ------ 164.105 - 0,0615547636909227
0 1 0 1 ------ 166.501 - 0,0624534883720930
0 1 1 0 ------ 167.099 - 0,0626777944486122
0 1 1 1 ------ 168 835 - 0,0633289572393098
1 0 0 0 ------ 164.086 - 0,0615476369092273
1 0 0 1 ------ 166.963 - 0,0626267816954239
1 0 1 0 ------ 166.931 - 0,0626147786946737
1 0 1 1 ------ 169 470 - 0,0635671417854464
1 1 0 0 ------ 166.622 - 0,0624988747186797
1 1 0 1 ------ 169.326 - 0,0635131282820705
1 1 1 0 ------ 169 251 - 0,0634849962490623
1 1 1 1 ------ 170 640 - 0,0640060015003751
El problema que se plantea es que cuando procesaba esta manera sólo procesa unos 4.000 datos y la necesidad de procesar muchos más. Tengo 4 GB de RAM y Matlab 2012. Lo que pensé es: Asignar a cada cliente un entero:
0 0 0 0------ 1
0 0 0 1-------2
0 0 1 0-------3
0 0 1 1-------4
0 1 0 0-------5
0 1 0 1-------6
0 1 1 0-------7
0 1 1 1-------8
1 0 0 0-------9
1 0 0 1-------10
1 0 1 0-------11
1 0 1 1-------12
1 1 0 0-------13
1 1 0 1-------14
1 1 1 0-------15
1 1 1 1-------16
y se establece como un contador para asignar el número de veces que se repite ese entero. De esta manera, tal vez conseguir muchas procesamiento de datos.
¿Como podria realizar esto y que mi ordenador fuera capaz de hacer el recuento? Sólo necesito el recuento, las subcadenas generadas no es necesario almacenarlas pero el patron y el numero de veces que se ha repetido ese patron si es necesario almacenarla.
Muchas gracias
Valora esta pregunta


0