Вартість ланцюжка матриць
Знайдіть мінімальну кількість скалярних множень для ланцюжка до 12 матриць.
def chain_cost(dimensions):
if type(dimensions) not in (list, tuple) or not 2 <= len(dimensions) <= 13:
raise ValueError("one through twelve matrices")
if any(type(d) is not int or not 1 <= d <= 1000 for d in dimensions):
raise ValueError("dimensions 1 through 1000")
n = len(dimensions)-1
cost = [[0]*n for _ in range(n)]
for width in range(2, n+1):
for left in range(n-width+1):
right = left+width-1
cost[left][right] = min(
cost[left][k]+cost[k+1][right]+
dimensions[left]*dimensions[k+1]*dimensions[right+1]
for k in range(left,right))
return cost[0][n-1]| Проєкт | Перевірте одну матрицю й різні дужки, відхиляючи розміри поза 1–1000 без множення елементів матриць. |
|---|---|
| Перевірте перед застосуванням | Порівняйте фактичну поведінку з очікуваним результатом. Якщо перевірка не проходить, з’ясуйте причину перед наступними змінами. |
| Моделі | Налаштуйте OpenAI-сумісний або Anthropic endpoint із базовою URL-адресою та API-ключем, якщо він потрібен. Перевірте з’єднання. Локальний сервер моделі має працювати; віддалені інструменти можуть окремо передавати дані. |
def chain_cost(dimensions):
if type(dimensions) not in (list, tuple) or not 2 <= len(dimensions) <= 13:
raise ValueError("one through twelve matrices")
if any(type(d) is not int or not 1 <= d <= 1000 for d in dimensions):
raise ValueError("dimensions 1 through 1000")
n = len(dimensions)-1
cost = [[0]*n for _ in range(n)]
for width in range(2, n+1):
for left in range(n-width+1):
right = left+width-1
cost[left][right] = min(
cost[left][k]+cost[k+1][right]+
dimensions[left]*dimensions[k+1]*dimensions[right+1]
for k in range(left,right))
return cost[0][n-1]Відокремлюйте обчислений план від роботи, яку він представляє
ChainArbor надає для обчислювального планування робоче середовище програмування у Windows, де можна обговорювати припущення з підключеною моделлю. Почніть із визначення того, що функція планування насправді повертає і хто це використовує. Оцінка вартості, порядок виконання та виконана операція — різні результати, і корисний запит на зміну явно їх розрізняє.
Планування вартості ланцюжка матриць — наданий приклад завдання. Можна попросити асистента перевірити валідацію розмірностей і обчислену арифметичну вартість перед розширенням застосунку. Додайте код виклику та його очікування, щоб запропонована правка випадково не подавала мінімальну вартість як розклад множень або готовий матричний результат.
Використовуйте обговорення, щоб виявити ці рішення щодо інтерфейсу, а потім перевірте отримані зміни коду. Перевірте короткі послідовності розмірностей із незалежно встановленою вартістю, включно з випадком однієї матриці, і запустіть власні тести проєкту. Якщо згодом вам знадобиться план виконання, розглядайте його подання та перевірку як додаткові вимоги, а не як автоматичний наслідок обчислення вартості.
Для вибору нефільтрованої моделі ШІ підключіть підтримуваний сумісний з OpenAI або Anthropic сервіс, який пропонує потрібну модель. Облікові дані, підтримка інструментів і межі контексту залежать від цього налаштування. Середовище не скасовує обмежень постачальника; воно допомагає пов’язувати запропоновані зміни планування з кодом і критеріями прийняття, які ви можете перевірити.
Питання для уточнення меж коду планування
Що просити, якщо потрібен порядок виконання?
Попросіть явне подання порядку й опишіть, як код виклику його використовуватиме. Функція, що повідомляє мінімальну арифметичну вартість, може не створювати такого подання. Додайте приклади перевірки і плану, і заявленої вартості.
Навіщо тестувати ланцюжок лише з однієї матриці?
Він визначає базову поведінку, коли множення не потрібне. Додайте цей випадок поряд із невеликим прикладом із кількох матриць, щоб перевірити пропозицію асистента і на межі, і щодо логіки планування довших ланцюжків.
Чи може середовище перевірити фактичні числові результати матричних операцій?
Для цих результатів використовуйте числові інструменти й тести проєкту. Середовище програмування підтримує обговорення та перевірку запропонованих змін; правильний тест вартості не доводить, що окрема реалізація множення обчислює правильні значення.
Як не допустити розширення інтерфейсу під час рефакторингу вартості?
Зазначте в запиті поточний тип результату й потрібну поведінку коду виклику. Перевірте різницю версій на нові виходи чи змінені одиниці виміру. Якщо потрібен докладніший план, визначте це як свідоме подальше завдання, а не побічний рефакторинг.
ChainArbor · Оновлено 2026-10-25