tags:

views:

85

answers:

4

Hi I have a list that looks like this:

      val1   val2
r1     10     3              
r2      5     5
r3      9     7
r4      4     1
r5      2     9
r6     1000   0

I need to get the row in which both values are at their maximum together for example:

      val1   val2
r1     10     3      no match both values can be highe
r2      5     5      no match both values can be higher
r3      9     7      MATCH val1 can be higher but it would make val2 lower and viceversa
r4      4     1      no match both values can be higher
r5      2     9      no match val2 is at its highest but val1 can be higher
r6     1000   0      no match val1 is at its highest but val2 can be higher

in this case it would be r3

hope this time it's clear

A: 

Just select the cell the highest sum of those two columns.

BioBuckyBall
+2  A: 
      val1   val2   val1+val2
r1     10     3        13
r2      5     5        10
r3      9     7        16    <<
r4      4     1         5
r5      2     9        11

Looks like the best solution is still to select the maximum by the sum of the two numbers:

Tuple<int,int> GetBest(IEnumerable<Tuple<int,int>> pairs)
{
    return pairs.MaxBy(pair => pair.Item1 + pair.Item2);
}

(with MaxBy from MoreLINQ)

dtb
what if there is 1000,0 , val1 would be at it maximum but val2 could be higher and the sum would be the highest and still no match
Luiscencio
In 1000,0 val2 could be higher, but only if val1 is **much** lower, so 1000,0 still looks like the 'best' item to me. You need to specify clearly what makes an item 'best'.
dtb
+3  A: 

It's not clear what you're asking for:

1) you don't want any pair that is dominated by another pair.
2) you don't want items where val1 is at maximum but val2 could be higher, and vice versa.

1 implies that you want some pair on the upper edge of the set.
2 simply means you discard the two endpoints.

this still leaves any possible number of choices

alt text

In the above graph, there are 2 points that are strictly dominated, and so you disqualify them. There are two points that satisfy (X is maximum but Y can increase, or vice versa) so you disqualify those as well. That still leaves two points that satisfy (Neither x nor Y can increase without lowering the other one)

In fact (as also pointed out by Jason in comments), looking at your original data, (10,3) also satisfies (neither val1 nor val2 can be increased without lowering the other)

Jimmy
A: 

here:

given

     val1  val2
r1  10   3
r2  5   5
r3  9   7
r4  4   1
r5  2   9
r6  1000  0
r7  5   1000
r8  5   4

order by val2 ASC

     val1  val2
r6  1000  0
r4  4   1
r1  10   3
r8  5   4
r2  5   5
r3  9   7
r5  2   9
r7  5   1000

then order by val1 DESC

     val1  val2
r6  1000  0
r1  10    3
r3  9   7
r7  5   1000
r2  5   5
r8  5   4
r4  4   1
r5  2   9

now do s=(val1[n+1]-val1[n])/(val2[n+1]-val2[n])

n       s
1   -330
2   -0.25
3   1.333333333
4   0
5   0
6   0.001001001
7   -0.25
8   0.222222222

here, we can see that s is greater at n=3 which corresponds to r3(9,7)

Luiscencio
LOL. Why didn't you just say so? I'm sorry dude, we want to help you but this is just absurd. Your requirements are unclear and now you're providing an absurd definition of "best" that is in no way intuitively obvious nor follows logically from what you previously stated.
Jason