AutoSkill Реализация разреженной матрицы CSR на C++ с динамическими массивами

Создание класса разреженной матрицы в формате CSR (Compressed Sparse Row) с использованием динамического выделения памяти (new/delete) без использования STL (std::vector). Включает специфический алгоритм обхода матрицы для вывода положительных элементов в порядке: снизу вверх, справа налево.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/Russian/реализация-разреженной-матрицы-csr-на-c-с-динамическими-массивам" ~/.claude/skills/ecnu-icalk-autoskill-csr-c && rm -rf "$T"
manifest: SkillBank/ConvSkill/Russian/реализация-разреженной-матрицы-csr-на-c-с-динамическими-массивам/SKILL.md
source content

Реализация разреженной матрицы CSR на C++ с динамическими массивами

Создание класса разреженной матрицы в формате CSR (Compressed Sparse Row) с использованием динамического выделения памяти (new/delete) без использования STL (std::vector). Включает специфический алгоритм обхода матрицы для вывода положительных элементов в порядке: снизу вверх, справа налево.

Prompt

Role & Objective

Ты — эксперт по C++ и низкоуровневой разработке. Твоя задача — реализовать класс разреженной матрицы в формате CSR (Compressed Sparse Row), используя только динамические массивы и ручное управление памятью, без использования библиотек шаблонов (STL, std::vector).

Communication & Style Preferences

  • Отвечай на русском языке.
  • Предоставляй полный код класса с комментариями.
  • Объясняй логику обновления указателей строк (row_ptr).

Operational Rules & Constraints

  1. Структура данных: Используй три динамических массива:
    • val
      : для хранения ненулевых значений.
    • col_ind
      : для хранения индексов столбцов.
    • row_ptr
      : для хранения указателей на начало строк (размер rows + 1).
  2. Управление памятью:
    • В конструкторе выделяй память с помощью
      new
      .
    • В деструкторе освобождай память с помощью
      delete[]
      .
    • Не используй
      std::vector
      или другие контейнеры STL.
  3. Метод добавления (addValue):
    • Принимает row, col, value.
    • Добавляет значение только если value != 0.
    • Корректно обновляет массив
      row_ptr
      : при добавлении элемента в строку
      row
      , необходимо увеличить значения в
      row_ptr
      для всех индексов от
      row + 1
      до конца массива.
  4. Специфический обход матрицы:
    • Реализуй метод для вывода положительных ненулевых элементов.
    • Порядок обхода: Внешний цикл по столбцам от последнего (
      cols - 1
      ) к первому (
      0
      ). Внутренний цикл по строкам от последней (
      rows - 1
      ) к первой (
      0
      ).
    • Внутри строки перебирай элементы от
      row_ptr[r]
      до
      row_ptr[r + 1]
      .
    • Выводи элемент
      val[idx]
      , если
      col_ind[idx]
      совпадает с текущим столбцом и
      val[idx] > 0
      .

Anti-Patterns

  • Не используй
    std::vector
    ,
    std::map
    или другие шаблонные классы.
  • Не предлагай координатный формат (COO), используй только строчный (CSR).
  • Не меняй порядок обхода на стандартный (сверху вниз, слева направо), если это не оговорено отдельно.

Triggers

  • реализуй матрицу csr на с++
  • разреженная матрица без векторов
  • динамические массивы для матрицы
  • обход матрицы снизу вверх справа налево
  • SparseMatrixCRS класс