Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - burnssss

#1
.NET (C#, VB.NET, ASP) / Re: DUDA CODIGO C#
30 Octubre 2013, 22:15 PM
Entender entiendo lo que hace.
A partir de una secuencia binaria intento extraer subsecuencias de longitud 4. Pero debido a la cantidad de datos, los patrones binarios se convierten a enteros y a partir de ahi se hace el recuento de patrones.

Un ejemplo matematico seria el siguiente:

SUCESION BINARIA

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).

SOLUCION

1) 1 (1) 0 (2) 1 (3) 1 (4)
2) 1 (1) 1 (3) 0 (5) 1 (7)
3) 1 (1) 1 (4) 1 (7) 1 (10)
4) 1 (1) 0 (5) 0 (9) 1 (13)
5) 1 (1) 0 (6) 1 (11) 0 (16)
6) 1 (1) 1 (7) 1 (13) 1 (19)
7) 0 (2) 1 (3) 1 (4) 0 (5)
8) 0 (2) 1 (4) 0 (6) 0 (8)
9) 0 (2) 0 (5) 0 (8) 1 (11)
10) 0 (2) 0 (6) 1 (10) 0 (14)
11) 0 (2) 1 (7) 1 (12) 1 (17)
12) 0 (2) 0 (8) 0 (14) 0 (20)
13) 1 (3) 1 (4) 0 (5) 0 (6)
14) 1 (3) 0 (5) 1 (7) 0 (9)
15) 1 (3) 0 (6) 0 (9) 1 (12)
16) 1 (3) 1 (7) 1 (11) 0 (15)
17) 1 (3) 0 (8) 1 (13) 1 (18)
18) 1 (4) 0 (5) 0 (6) 1 (7)
19) 1 (4) 0 (6) 0 (8) 1 (10)
20) 1 (4) 1 (7) 1 (10) 1 (13)
21) 1 (4) 0 (8) 1 (12) 0 (16)
22) 1 (4) 0 (9) 0 (14) 1 (19)
23) 0 (5) 0 (6) 1 (7) 0 (8)
24) 0 (5) 1 (7) 0 (9) 1 (11)
25) 0 (5) 0 (8) 1 (11) 0 (14)
26) 0 (5) 0 (9) 1 (13) 1 (17)
27) 0 (5) 1 (10) 0 (15) 0 (20)
28) 0 (6) 1 (7) 0 (8) 0 (9)
29) 0 (6) 0 (8) 1 (10) 1 (12)
30) 0 (6) 0 (9) 1 (12) 0 (15)
31) 0 (6) 1 (10) 0 (14) 1 (18)
32) 1 (7) 0 (8) 0 (9) 1 (10)
33) 1 (7) 0 (9) 1 (11) 1 (13)
34) 1 (7) 1 (10) 1 (13) 0 (16)
35) 1 (7) 1 (11) 0 (15) 1 (19)
36) 0 (8) 0 (9) 1 (10) 1 (11)
37) 0 (8) 1 (10) 1 (12) 0 (14)
38) 0 (8) 1 (11) 0 (14) 1 (17)
39) 0 (8) 1 (12) 0 (16) 0 (20)
40) 0 (9) 1 (10) 1 (11) 1 (12)
41) 0 (9) 1 (11) 1 (13) 0 (15)
42) 0 (9) 1 (12) 0 (15) 1 (18)
43) 1 (10) 1 (11) 1 (12) 1 (13)
44) 1 (10) 1 (12) 0 (14) 0 (16)
45) 1 (10) 1 (13) 0 (16) 1 (19)
46) 1 (11) 1 (12) 1 (13) 0 (14)
47) 1 (11) 1 (13) 0 (15) 1 (17)
48) 1 (11) 0 (14) 1 (17) 0 (20)
49) 1 (12) 1 (13) 0 (14) 0 (15)
50) 1 (12) 0 (14) 0 (16) 1 (18)
51) 1 (13) 0 (14) 0 (15) 0 (16)
52) 1 (13) 0 (15) 1 (17) 1 (19)
53) 0 (14) 0 (15) 0 (16) 1 (17)
54) 0 (14) 0 (16) 1 (18) 0 (20)
55) 0 (15) 0 (16) 1 (17) 1 (18)
56) 0 (16) 1 (17) 1 (18) 1 (19)
57) 1 (17) 1 (18) 1 (19) 0 (20)

Los numeros entre parentesis indican el orden que deben tener.
A partir de ahi se hace un recuento de patrones con la frecuencia relativa.
Funcionar , el codigo funciona correctamente. Me indica patrones en enteros y el numero de veces que se repiten.
#2
Con el siguiente codigo pretendo extraer las subcadenas de longitud 4 y hacer un recuento del numero de cada patron. Para ello, convierto cada patron en un numero entero y a partir de ahi inicio el contador. No sé muy bien si las combinaciones las hace correctamente:
por ejemplo si tengo la secuencia:

s=[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) ];

Los numeros entre parentesis son solo para indicar el orden.
Las subcadenas de longitud 4 serian:

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],

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

Para ello intento utilizar el siguiente codigo:
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
#include <string>

using namespace std;

int main() {
string cadena;
char pr;
// ofstream fo ("entreno.txt");
ifstream fi("entreno.txt");
int numero;
int patron_int;
   }
   
//  fo.close();
getline(fi, cadena);
vector<int>v(cadena.size());
vector<int>patron(4);
vector<long long>patrones(16);
float N;

//cout << cadena;
//numero = Int32.Parse(cadena[0]);
//pr=cadena[0].c_str();
//cout << numero;
//cout << cadena[0];
for(int i=0; i<cadena.size(); i++) {
// if (cadena[i]=='1') v[i]=0;
// else if (cadena[i]=='1') v[i]=1;
v[i]=cadena[i]-48;
// cout << v[i];
}

for(int i=0;i<v.size()-3;i++) {
for(int j=i;j<v.size()-3;j++) {
patron[3]=v[i];
patron[2]=v[j+1];
patron[1]=v[j+2];
patron[0]=v[j+3];
//cout << patron[3] << patron[2] << patron[1] << patron[0] << endl;
patron_int= patron[0] + patron[1]*2 + patron[2]*4 + patron[3]*8;
//cout << patron_int << endl;
patrones[patron_int]++;
//if(i==v.size()/5) system("pause");

//system("pause");
}
N=(100*i)/(v.size()-3);
// cout << N << "%" << endl;

}

for(int i=0; i<patrones.size(); i++) {
cout << i << " se repite " << patrones[i] << " veces." << endl;
}
//cout << v.size();
system("pause");
fi.close();
return 0;
}


Pero debido a que no soy un programador experto en C++, quisiera mejorarlo y modificarlo de forma que me calculara subcuerdas de 4-20.
Primero me podrías decir que debo modificar y despues os pregunto dudas para asi intentar aprender a programar en C++.
Muchas gracias
#3
.NET (C#, VB.NET, ASP) / Re: DUDA CODIGO C#
30 Octubre 2013, 15:44 PM
He quitado algun comentario.
Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
#include <string>

using namespace std;

int main() {
string cadena;
char pr;
// ofstream fo ("entreno.txt");
ifstream fi("entreno.txt");
int numero;
int patron_int;
   }
   
//  fo.close();
getline(fi, cadena);
vector<int>v(cadena.size());
vector<int>patron(4);
vector<long long>patrones(16);
float N;

//cout << cadena;
//numero = Int32.Parse(cadena[0]);
//pr=cadena[0].c_str();
//cout << numero;
//cout << cadena[0];
for(int i=0; i<cadena.size(); i++) {
// if (cadena[i]=='1') v[i]=0;
// else if (cadena[i]=='1') v[i]=1;
v[i]=cadena[i]-48;
// cout << v[i];
}

for(int i=0;i<v.size()-3;i++) {
for(int j=i;j<v.size()-3;j++) {
patron[3]=v[i];
patron[2]=v[j+1];
patron[1]=v[j+2];
patron[0]=v[j+3];
//cout << patron[3] << patron[2] << patron[1] << patron[0] << endl;
patron_int= patron[0] + patron[1]*2 + patron[2]*4 + patron[3]*8;
//cout << patron_int << endl;
patrones[patron_int]++;
//if(i==v.size()/5) system("pause");

//system("pause");
}
N=(100*i)/(v.size()-3);
// cout << N << "%" << endl;

}

for(int i=0; i<patrones.size(); i++) {
cout << i << " se repite " << patrones[i] << " veces." << endl;
}
//cout << v.size();
system("pause");
fi.close();
return 0;
}


Ahora voy a ir preguntando sobre este codigo. Primero decirme que mas cambiar para ponerlo optimo y despues preguntare dudas
#4
.NET (C#, VB.NET, ASP) / Re: DUDA CODIGO C#
30 Octubre 2013, 15:04 PM
Perdon por el desorden. Efectivamente el codigo no lo he hecho yo. Yo he intentado implantar estas operaciones en Matlab pero no he podido. Entonces recurrí a C++. No tengo mucha idea de C++. Todo lo que hice con este código es entender su funcionamiento y ahora intentar desarrollarlo. El problema que se me habia planteado es que en matlab al crear las subcuerdas, el numero de datos es tan grande que al final no me hace el recuento de los patrones. He probado este codigo y si me hace el recuento. Creo que basicamente lo que hace es representar cada patron mediante un numero entero, y apartir de ahi hace el recuento de enteros, que corresponden a un patron binario. Como he dicho, quizas sea más facil implantarlo en C++ que en matlab. Asi que si puedes ayudarme en algo te lo agradecería.
#5
.NET (C#, VB.NET, ASP) / DUDA CODIGO C#
30 Octubre 2013, 14:35 PM
Tengo una duda.
El siguiente codigo me calcula cuantas veces se repite una subcadena a partir de una cadena binaria.
La longitud de las subcadenas en este ejemplo es de 4. ¿ Como modificaria el codigo para obtener subcadenas de longitud desde 5 a 20?


#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
#include <string>

using namespace std;

int main() {
   string cadena;
   char pr;
//   ofstream fo ("entreno.txt");
   ifstream fi("entreno.txt");
   int numero;
   int patron_int;
   //vector<int> v(1050000);
//   for (int i=0; i<170000; i++) {
//      //cout << v;
//      num=rand()%2;
//      fo<<num;
//   }
//  fo.close();
   getline(fi, cadena);
   vector<int>v(cadena.size());
   vector<int>patron(4);
   vector<long long>patrones(16);
   float N;

   //cout << cadena;
   //numero = Int32.Parse(cadena[0]);
   //pr=cadena[0].c_str();
   //cout << numero;
   //cout << cadena[0];
   for(int i=0; i<cadena.size(); i++) {
//      if (cadena=='1') v=0;
//      else if (cadena=='1') v=1;
      v=cadena-48;
//      cout << v;
   }

   for(int i=0;i<v.size()-3;i++) {
      for(int j=i;j<v.size()-3;j++) {
         patron[3]=v;
         patron[2]=v[j+1];
         patron[1]=v[j+2];
         patron[0]=v[j+3];
         //cout << patron[3] << patron[2] << patron[1] << patron[0] << endl;
         patron_int= patron[0] + patron[1]*2 + patron[2]*4 + patron[3]*8;
         //cout << patron_int << endl;
         patrones[patron_int]++;
         //if(i==v.size()/5) system("pause");

         //system("pause");
      }
      N=(100*i)/(v.size()-3);
   //   cout << N << "%" << endl;

   }

   for(int i=0; i<patrones.size(); i++) {
      cout << i << " se repite " << patrones << " veces." << endl;   
   }
   //cout << v.size();   
   system("pause");
   fi.close();
   return 0;
}