К обычному разбору
Тренировка по собеседованию1 задачаТехническое собеседованиеSber / GigaChat2026-03-18

Sber / GigaChat: Техническое собеседование

Идите сверху вниз: сначала попробуйте сами, затем откройте разбор. Если шаг с кодом, пишите решение прямо здесь и запускайте проверки на странице.

1ЗадачаMedium

Корень квадратного уравнения градиентным спуском

Условие

Дано квадратное уравнение:

f(x)=ax2+bx+cf(x) = ax^2 + bx + c

Нужно приблизить один из корней через gradient descent по loss:

loss(x)=f(x)2loss(x) = f(x)^2

На каждом шаге обновляйте:

xxlr2f(x)(2ax+b)x \leftarrow x - lr \cdot 2f(x)(2ax + b)

Сигнатура

def gd_quadratic_root(a: float, b: float, c: float, x0: float, lr: float, steps: int) -> float:

Верните x, округленный до 6 знаков.

Решение прямо на странице

Напишите код, запустите проверки и только потом открывайте разбор.

Проверка решения

Нажмите «Запустить проверки» или Ctrl+Enter.

Показать разбор

Подсказки

  • Loss

    Корни уравнения — это точки, где f(x)^2 равно нулю.

  • Производная

    Используйте chain rule: derivative of f(x)^2 is 2 * f(x) * f_prime(x).

Идея решения

Минимизируем не само f(x), а f(x)^2, потому что корень уравнения соответствует нулю этого loss. Производная по x:

ddxf(x)2=2f(x)f(x)=2f(x)(2ax+b)\frac{d}{dx} f(x)^2 = 2f(x)f'(x) = 2f(x)(2ax + b)

Дальше остается обычный gradient descent от начальной точки x0.

Эталонный код

def gd_quadratic_root(a: float, b: float, c: float, x0: float, lr: float, steps: int) -> float:
    x = float(x0)

    for _ in range(steps):
        fx = a * x * x + b * x + c
        grad = 2 * fx * (2 * a * x + b)
        x -= lr * grad

    return round(x, 6)
Сложность
Время: O(steps). Память: O(1).
Каждый шаг делает константное число арифметических операций.