Re: [algogeeks] exon chaining

2011-05-12 Thread pacific :-)
Can you provide example input and output ?

On Thu, May 12, 2011 at 9:32 AM, ganesha suresh.iyenga...@gmail.com wrote:

 Can some one help in finding out the bug in the below code.

 Input: (left,right,weight) representing intervals
 Output: maximum weight of non-overlapping intervals

 #include iostream
 #include vector
 #include math.h
 #include algorithm

 struct point
 {
int value;
bool isLeft;
long int weight;
int index;
struct point* prev;
 };

 typedef struct point* NODEPTR;

 bool compare (NODEPTR A,NODEPTR B)
 {
return (A-value  B-value);
 }

 int main()
 {

int numIntervals;
cin  numIntervals;

// read the intervals and sort the list
vectorNODEPTR points;

for (int i=0; i  numIntervals; i++)
{
NODEPTR p1 = new point;
p1-isLeft = true;
p1-weight = 0;
p1-prev = NULL;
cin  p1-value;
points.push_back(p1);

NODEPTR p2 = new point;
p2-isLeft = false;
p2-prev = p1;
cin  p2-value;
cin  p2-weight;
points.push_back(p2);
}

sort(points.begin(),points.end(),compare);


vectorNODEPTR::iterator it;
int idx=1;
for (it=points.begin(); it!=points.end(); ++it)
{
(*it)-index = idx++;
}

/*for (it=points.begin(); it!=points.end(); ++it)
{
if ((*it)-prev != NULL)
cout  (*it)-prev-value (*it)-value 
(*it)-
 weight (*it)-prev-index  endl;
}*/


int score[2*numIntervals + 1];
for (int i=0; i = 2*numIntervals; i++)
{
score[i] = 0;
}

int i = 1;
for (it=points.begin(); it!=points.end(); ++it)
{
// right end of the interval
if (false == (*it)-isLeft)
{
int j = (*it)-prev-index;

int t1 = score[j] + (*it)-weight;
int t2 = score[i-1];

if (t1  t2)
score[i] = t2;
else
score[i] = t1;
}
else
{
score[i] = score[i-1];
}

i++;
}

cout  Max weight is   score[2*numIntervals]
 2*numIntervals  endl;

return 0;
 }

 --
 You received this message because you are subscribed to the Google Groups
 Algorithm Geeks group.
 To post to this group, send email to algogeeks@googlegroups.com.
 To unsubscribe from this group, send email to
 algogeeks+unsubscr...@googlegroups.com.
 For more options, visit this group at
 http://groups.google.com/group/algogeeks?hl=en.




-- 
regards,
chinna.

-- 
You received this message because you are subscribed to the Google Groups 
Algorithm Geeks group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



[algogeeks] exon chaining

2011-05-11 Thread ganesha
Can some one help in finding out the bug in the below code.

Input: (left,right,weight) representing intervals
Output: maximum weight of non-overlapping intervals

#include iostream
#include vector
#include math.h
#include algorithm

struct point
{
int value;
bool isLeft;
long int weight;
int index;
struct point* prev;
};

typedef struct point* NODEPTR;

bool compare (NODEPTR A,NODEPTR B)
{
return (A-value  B-value);
}

int main()
{

int numIntervals;
cin  numIntervals;

// read the intervals and sort the list
vectorNODEPTR points;

for (int i=0; i  numIntervals; i++)
{
NODEPTR p1 = new point;
p1-isLeft = true;
p1-weight = 0;
p1-prev = NULL;
cin  p1-value;
points.push_back(p1);

NODEPTR p2 = new point;
p2-isLeft = false;
p2-prev = p1;
cin  p2-value;
cin  p2-weight;
points.push_back(p2);
}

sort(points.begin(),points.end(),compare);


vectorNODEPTR::iterator it;
int idx=1;
for (it=points.begin(); it!=points.end(); ++it)
{
(*it)-index = idx++;
}

/*for (it=points.begin(); it!=points.end(); ++it)
{
if ((*it)-prev != NULL)
cout  (*it)-prev-value (*it)-value   
  (*it)-
weight (*it)-prev-index  endl;
}*/


int score[2*numIntervals + 1];
for (int i=0; i = 2*numIntervals; i++)
{
score[i] = 0;
}

int i = 1;
for (it=points.begin(); it!=points.end(); ++it)
{
// right end of the interval
if (false == (*it)-isLeft)
{
int j = (*it)-prev-index;

int t1 = score[j] + (*it)-weight;
int t2 = score[i-1];

if (t1  t2)
score[i] = t2;
else
score[i] = t1;
}
else
{
score[i] = score[i-1];
}

i++;
}

cout  Max weight is   score[2*numIntervals]
2*numIntervals  endl;

return 0;
}

-- 
You received this message because you are subscribed to the Google Groups 
Algorithm Geeks group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.