Algorithm Search⌘K

Proofs: Dinkelbach's algorithm

These are the human proofs of Dinkelbach's algorithm, at full length.

Dinkelbach's algorithm returns an optimal ratio after finitely many and, for integer data, O(log U) iterations full

This proof shows: correctness.

We use the pseudocode of the page. XX is a finite set, N,D:X→RN, D : X \to \mathbb{R} with D>0D > 0 on XX, λ∗=min⁡x∈XN(x)/D(x)\lambda^* = \min_{x \in X} N(x)/D(x), and F(λ)=min⁡x∈X(N(x)−λD(x))F(\lambda) = \min_{x \in X} (N(x) - \lambda D(x)). The oracle of line L4 returns a minimizer of N−λDN - \lambda D. Write x0,x1,…x_0, x_1, \ldots for the successive values of xx, λk=N(xk)/D(xk)\lambda_k = N(x_k)/D(x_k), Dk=D(xk)D_k = D(x_k), and Fk=F(λk)=N(xk+1)−λkDk+1F_k = F(\lambda_k) = N(x_{k+1}) - \lambda_k D_{k+1}, where xk+1x_{k+1} is the point returned at line L4 in round kk.

Lemma 1 (Dinkelbach). F(λ)≥0F(\lambda) \ge 0 if and only if λ≤λ∗\lambda \le \lambda^*, and F(λ∗)=0F(\lambda^*) = 0.

Proof. N(x)−λD(x)=D(x)(N(x)/D(x)−λ)N(x) - \lambda D(x) = D(x)\big(N(x)/D(x) - \lambda\big) with D(x)>0D(x) > 0. If λ≤λ∗\lambda \le \lambda^*, each term is ≥0\ge 0, so F(λ)≥0F(\lambda) \ge 0. If λ>λ∗\lambda > \lambda^*, an optimal x∗x^* gives a negative term, so F(λ)<0F(\lambda) < 0. At λ∗\lambda^* the optimal x∗x^* gives 00. □\square

Claim 1 (correctness and finiteness). The algorithm stops, and it returns xkx_k with λk=λ∗\lambda_k = \lambda^*.

Proof. In round kk, Fk≤N(xk)−λkDk=0F_k \le N(x_k) - \lambda_k D_k = 0, since xkx_k is one of the candidates. If line L5 finds Fk≥0F_k \ge 0, then Fk=0=F(λk)F_k = 0 = F(\lambda_k), so λk≤λ∗\lambda_k \le \lambda^* by Lemma 1. Also λk≥λ∗\lambda_k \ge \lambda^* because it is the ratio of a feasible point. So λk=λ∗\lambda_k = \lambda^* and xkx_k is optimal. Otherwise Fk<0F_k < 0, that is N(xk+1)<λkDk+1N(x_{k+1}) < \lambda_k D_{k+1}, so λk+1<λk\lambda_{k+1} < \lambda_k. The ratios strictly decrease, so no point of XX appears twice, and the algorithm stops after at most ∣X∣|X| rounds. □\square

Lemma 2 (monotone denominators). If yy minimizes N−μDN - \mu D and zz minimizes N−νDN - \nu D with μ<ν\mu < \nu, then D(y)≤D(z)D(y) \le D(z).

Proof. By the two minimalities, N(y)−μD(y)≤N(z)−μD(z)N(y) - \mu D(y) \le N(z) - \mu D(z) and N(z)−νD(z)≤N(y)−νD(y)N(z) - \nu D(z) \le N(y) - \nu D(y). Adding and cancelling N(y)+N(z)N(y) + N(z) gives (ν−μ)D(y)≤(ν−μ)D(z)(\nu - \mu) D(y) \le (\nu - \mu) D(z). □\square

For k≥1k \ge 1, xkx_k minimizes at λk−1\lambda_{k-1} and xk+1x_{k+1} minimizes at λk<λk−1\lambda_k < \lambda_{k-1}, so Dk+1≤DkD_{k+1} \le D_k: the denominators do not increase from round 1 on.

Claim 2 (the halving step). For every round k≥1k \ge 1 in which the algorithm does not stop,

∣Fk∣∣Fk−1∣+Dk+1Dk≤1.\frac{|F_k|}{|F_{k-1}|} + \frac{D_{k+1}}{D_k} \le 1.

Proof. Since xkx_k minimizes N−λk−1DN - \lambda_{k-1} D, its value is at most the value of xk+1x_{k+1}: Fk−1=N(xk)−λk−1Dk≤N(xk+1)−λk−1Dk+1F_{k-1} = N(x_k) - \lambda_{k-1} D_k \le N(x_{k+1}) - \lambda_{k-1} D_{k+1}. Hence

Fk=N(xk+1)−λkDk+1≥Fk−1+(λk−1−λk)Dk+1.F_k = N(x_{k+1}) - \lambda_k D_{k+1} \ge F_{k-1} + (\lambda_{k-1} - \lambda_k) D_{k+1}.

From Fk−1=N(xk)−λk−1Dk=Dk(λk−λk−1)F_{k-1} = N(x_k) - \lambda_{k-1} D_k = D_k(\lambda_k - \lambda_{k-1}) we get λk−1−λk=∣Fk−1∣/Dk\lambda_{k-1} - \lambda_k = |F_{k-1}|/D_k. With Fk,Fk−1<0F_k, F_{k-1} < 0 the inequality reads −∣Fk∣≥−∣Fk−1∣+∣Fk−1∣Dk+1/Dk-|F_k| \ge -|F_{k-1}| + |F_{k-1}| D_{k+1}/D_k, which is the claim after division by ∣Fk−1∣|F_{k-1}|. □\square

So in each such round, ∣F∣|F| drops to at most half, or DD drops to at most half, because both ratios cannot exceed 1/21/2.

Claim 3 (integer data). If NN and DD take integer values with ∣N(x)∣≤U|N(x)| \le U and 1≤D(x)≤U1 \le D(x) \le U, with U≥2U \ge 2, the algorithm makes O(log⁡U)O(\log U) rounds.

Proof. While the algorithm runs, Fk=(N(xk+1)Dk−N(xk)Dk+1)/DkF_k = (N(x_{k+1}) D_k - N(x_k) D_{k+1})/D_k has a non-zero integer numerator, so ∣Fk∣≥1/Dk≥1/U|F_k| \ge 1/D_k \ge 1/U. Also ∣Fk∣≤∣N(xk+1)∣+∣λk∣Dk+1≤U+U⋅U≤2U2|F_k| \le |N(x_{k+1})| + |\lambda_k| D_{k+1} \le U + U \cdot U \le 2U^2. So among the rounds k≥1k \ge 1, the value ∣Fk∣|F_k| can halve at most lg⁡(2U2⋅U)=1+3lg⁡U\lg(2U^2 \cdot U) = 1 + 3 \lg U times. By Lemma 2, DkD_k is non-increasing from k=1k = 1 and lies in [1,U][1, U], so it can halve at most lg⁡U\lg U times. By Claim 2, each round k≥1k \ge 1 before the last does one of the two. With the first round and the last round, the number of rounds is at most 4lg⁡U+34 \lg U + 3. □\square

Back to Dinkelbach's algorithm