Llanguor.AlgebraOfSignatures
1.0.0
dotnet add package Llanguor.AlgebraOfSignatures --version 1.0.0
NuGet\Install-Package Llanguor.AlgebraOfSignatures -Version 1.0.0
<PackageReference Include="Llanguor.AlgebraOfSignatures" Version="1.0.0" />
<PackageVersion Include="Llanguor.AlgebraOfSignatures" Version="1.0.0" />
<PackageReference Include="Llanguor.AlgebraOfSignatures" />
paket add Llanguor.AlgebraOfSignatures --version 1.0.0
#r "nuget: Llanguor.AlgebraOfSignatures, 1.0.0"
#:package Llanguor.AlgebraOfSignatures@1.0.0
#addin nuget:?package=Llanguor.AlgebraOfSignatures&version=1.0.0
#tool nuget:?package=Llanguor.AlgebraOfSignatures&version=1.0.0
AlgebraOfSignatures
Библиотека для работы с алгебраическими операциями над сигнатурами однородных гиперграфов произвольной степени однородности. Позволяет представлять гиперграфы через компактную сигнатурную форму и выполнять над ними теоретико-множественные и арифметические операции.
Установка
dotnet add package AlgebraOfSignatures.Core
Или через Package Manager Console в Visual Studio:
Install-Package AlgebraOfSignatures.Core
Возможности
- Вычисление сигнатуры по матрице смежности гиперграфа. Сигнатура хранится в массиве произвольного ранга, соответствующего степени однородности.
- Создание объекта гиперграфа на основе вычисленной сигнатуры.
- Обратное преобразование: восстановление матрицы смежности или вектора степеней вершин из сигнатуры. Результаты кешируются и обновляются автоматически при изменении значений сигнатуры.
- Алгебраические операции над сигнатурами:
- Пересечение (
&) - Объединение (
|) - Сложение с константой — вертикальное и горизонтальное (
+) - Сложение двух сигнатур — вертикальное и горизонтальное (
+)
- Пересечение (
Использование
Создание гиперграфа из матрицы смежности
using AlgebraOfSignatures.Core;
using AlgebraOfSignatures.Core.Base;
// Матрица смежности в виде булева массива ранга uniformityDegree и размера vertexCount
var adjacencyArray = new bool[4, 4, 4]; // 3-однородный граф на 4 вершинах
// ... заполнение матрицы ...
var adjacencyMatrix = new Matrix<bool>(adjacencyArray);
var graph = UniformHyperGraph.FromAdjacencyMatrix(adjacencyMatrix);
Создание гиперграфа из вектора степеней вершин
var degreeArray = new int[4, 4]; // 2-однородный граф (обычный граф) на 4 вершинах
// ... заполнение вектора ...
var degreeVector = new Matrix<int>(degreeArray);
var graph = UniformHyperGraph.FromVertexDegreeVector(degreeVector);
Создание гиперграфа напрямую из значения сигнатуры
// Из объекта Signature
var signature = Signature.Empty(vertexCount: 5, uniformityDegree: 3);
var graph = UniformHyperGraph.FromSignature(signature, vertexCount: 5, uniformityDegree: 3);
// Из матрицы long-значений
var signatureMatrix = new Matrix<long>(new long[3, 2] { { 7, 3 }, { 5, 1 }, { 3, 0 } });
var graph2 = UniformHyperGraph.FromSignature(signatureMatrix, vertexCount: 5, uniformityDegree: 3);
Пустой гиперграф
var empty = UniformHyperGraph.Empty(vertexCount: 4, uniformityDegree: 2);
Сохранение и загрузка из файла
graph.SaveToFile("graph.txt");
var loaded = UniformHyperGraph.FromFile("graph.txt");
Получение матрицы смежности и вектора степеней вершин
Matrix<bool> adjacency = graph.AdjacencyMatrix; // кешируется до изменения сигнатуры
Matrix<int> degrees = graph.VertexDegreeVector; // кешируется до изменения сигнатуры
Операции над гиперграфами
Операции применяются к объектам UniformHyperGraph или напрямую к Signature. Все операции с двумя операндами требуют совпадения VertexCount и UniformityDegree.
Пересечение
var result = graph1 & graph2;
// Или явным вызовом:
var result = UniformHyperGraph.Intersect(graph1, graph2);
Объединение
var result = graph1 | graph2;
// Или явным вызовом:
var result = UniformHyperGraph.Union(graph1, graph2);
Сложение двух гиперграфов
// Вертикальное сложение (по умолчанию для оператора +)
var result = graph1 + graph2;
// Горизонтальное сложение
var result = UniformHyperGraph.Add(graph1, graph2, Signature.AddType.Horizontal);
Сложение с константой
// Вертикальное (оператор +)
var result = graph + 3L;
// Горизонтальное
var result = UniformHyperGraph.Add(graph, 3L, Signature.AddType.Horizontal);
Операции напрямую над сигнатурами
Все операции доступны и на уровне класса Signature:
var sig1 = Signature.Empty(vertexCount: 4, uniformityDegree: 2);
var sig2 = Signature.Empty(vertexCount: 4, uniformityDegree: 2);
// Установка значения
sig1.SetValue(5L, 0);
// Пересечение и объединение
var intersection = sig1 & sig2;
var union = sig1 | sig2;
// Сложение
var sum = sig1 + sig2;
var shifted = sig1 + 2L;
// Получение значения
long val = sig1.GetValue(0);
Матрица Matrix<T>
Вспомогательный класс для хранения многомерных массивов произвольного ранга. Используется как внутреннее представление матриц смежности, векторов степеней и сигнатур.
// Из существующего массива
var matrix = new Matrix<long>(new long[3, 3]);
// Нулевой массив заданного размера и ранга
var matrix = new Matrix<long>(size: 4, rank: 2);
// Чтение и запись
long value = matrix.GetValue(1, 2);
matrix.SetValue(42L, 1, 2);
// Событие при изменении значения
matrix.OnSetValue += (indices, value) =>
{
Console.WriteLine($"Изменено значение по [{string.Join(", ", indices)}] = {value}");
};
Сравнение и равенство
Signature и UniformHyperGraph реализуют IEquatable<T> и IComparable<T>, а также поддерживают операторы сравнения:
bool eq = graph1 == graph2;
bool neq = graph1 != graph2;
bool lt = graph1 < graph2;
bool gt = graph1 > graph2;
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 118 | 5/21/2026 |