Minimalist Flooring

Algebra Level 5

b + c + d a + a + c + d b + a + b + d c + a + b + c d \large{\left \lfloor{\frac{b+c+d}{a}} \right \rfloor+ \left \lfloor{\frac{a+c+d}{b}} \right \rfloor+\left \lfloor{\frac{a+b+d}{c}} \right \rfloor+\left \lfloor{\frac{a+b+c}{d}} \right \rfloor}

For positive real numbers a , b , c a,b,c and d d , find the smallest possible value of the above expression.


The answer is 9.

This section requires Javascript.
You are seeing this because something didn't load right. We suggest you, (a) try refreshing the page, (b) enabling javascript if it is disabled on your browser and, finally, (c) loading the non-javascript version of this page . We're sorry about the hassle.

3 solutions

Otto Bretscher
Sep 30, 2015

Responding to Eli's challenge:

Since x > x 1 \lfloor{x}\rfloor>x-1 we have j = 1 n ( k j x k x j ) > j = 1 n ( k j x k x j ) n = k j x k x j n n ( n 1 ) n \sum_{j=1}^{n}\left(\left\lfloor\frac{\sum_{k\ne{j}}x_k}{x_j}\right\rfloor\right)>\sum_{j=1}^{n}\left(\frac{\sum_{k\ne{j}}x_k}{x_j}\right)-n=\sum_{k\ne{j}}\frac{x_k}{x_j}-n\geq{n(n-1)-n} as the sum contains n ( n 1 ) 2 \frac{n(n-1)}{2} terms of the form x k x j + x j x k 2 \frac{x_k}{x_j}+\frac{x_j}{x_k}\geq{2} . Thus j = 1 n ( k j x k x j ) n ( n 1 ) n + 1 = ( n 1 ) 2 \sum_{j=1}^{n}\left(\left\lfloor\frac{\sum_{k\ne{j}}x_k}{x_j}\right\rfloor\right)\geq{n(n-1)-n+1=(n-1)^2} As Eli points out, this lower bound is attained.

Moderator note:

Oooh, that's a very nice simple way of showing the lower bound.

Eli Ross Staff
Sep 30, 2015

There is actually a nice generalization of this result with n n variables: min x 1 , , x n R + ( i = 1 n k i x k x i ) = ( n 1 ) 2 . \min_{x_1,\ldots,x_n \in \mathbb{R^+}} \left(\sum_{i=1}^{n} \left\lfloor\frac{\sum_{k\ne i} x_k}{x_i}\right\rfloor\right) = (n-1)^2.

A construction of such x i x_i is x 1 = n x_1=n and x 2 = x 3 = = x n = n + 1. x_2=x_3=\ldots=x_n = n+1. In this case, that would correspond to a = 4 a=4 and b = c = d = 5. b=c=d=5.

The crux of the proof that this is the minimum can be done with the Cauchy-Schwarz Inequality and a little creativity. Try to figure out how!

Proof of the minimum is much easier than Cauchy. If we ignore the floor function, it evaluates to n 2 n n^2-n . Accounting for the fractional part, we are removing n n values 0 x i < 1 0\leq x_i<1 . The sum of these values is an integer from 0 to n. Hence the max is n 1 n-1 . Thus the min of the expression is n 2 n ( n 1 ) n^2-n-(n-1) .

Calvin Lin Staff - 5 years, 8 months ago
Brock Brown
Sep 29, 2015

I found the lowest value with an evolutionary algorithm :

Python 3.4:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from math import floor
from random import random, choice
from time import time
population_limit = 10000 # iteration ends when reached
keep_best = 100 # creatures you keep after each iteration
diversity = 10000 # spawns random members in [0, diversity]
radioactivity = 10 # controls degree of mutation
mutation_choices = list(range(-radioactivity, 2))
def fitness(creature):
    # closer to 0 = more fit
    a, b, c, d = creature
    return floor((b + c + d)/a) +\
        floor((a + c + d)/b) + \
        floor((a + b + d)/c) + \
        floor((a + b + c)/d)
def mutate(creature):
    a, b, c, d = creature
    event = random()
    add = choice((1, -1)) * random() * 10**choice(mutation_choices)
    if event < 0.25:
        if a + add > 0:
            a += add
    elif event < 0.5:
        if b + add > 0:
            b += add
    elif event < 0.75:
        if c + add > 0:
            c += add
    else:
        if d + add > 0:
            d += add
    return (a, b, c, d)
def random_creature():
    return (random()*radioactivity,
        random()*radioactivity,
        random()*radioactivity,
        random()*radioactivity)
population = []
for creature in range(population_limit):
    population.append(random_creature())
population = [(fitness(creature), creature) for creature in population]
population = [i[1] for i in sorted(population)]
best = population[:keep_best]
population = best[:]
end = time() + 1
while time() < end:
    while len(population) < population_limit:
        population.append(mutate(choice(best)))
    population = [(fitness(creature), creature) for creature in population]
    population = [i[1] for i in sorted(population)]
    best = population[:keep_best]
    population = best[:]
print ("Lowest possible value:", fitness(population[0]))

Oh, it seems to be a nice Comp. Sci. exercise though I don't seem to get the logic out of that. But still thanks for the link! I will look up to "evolutionary algorithm".

Kartik Sharma - 5 years, 8 months ago

Log in to reply

It is actually an algebra exercise. See the other solutions for how to do this.

The coding approach might get stuck in local minimums. I do not think it provides a proof of global mins.

Calvin Lin Staff - 5 years, 8 months ago

Log in to reply

Yeah, I thought about this too after I posted it. Because the fitness function is an integer, it doesn't make a very good heuristic. It makes it so it gets stuck and the same creature populates the entire environment, and then further mutations don't make it go anywhere.

Brock Brown - 5 years, 8 months ago

0 pending reports

×

Problem Loading...

Note Loading...

Set Loading...