GraPHP는 PHP로 작성된 수학적 그래프/네트워크 라이브러리입니다.
개발 버전: 이 분기에는 향후 1.0 릴리스에 대한 코드가 포함되어 있습니다. 현재 안정적인 0.9 릴리스의 코드는
0.9.x
분기를 확인하세요.다가오는 1.0 릴리스는 이 패키지의 발전 방향이 될 것입니다. 그러나 아직 최신 버전이 아닌 경우에는 0.9.x를 적극적으로 지원할 예정입니다. 자세한 내용은 설치 지침을 참조하세요.
목차
설치가 완료되면 샘플 그래프를 초기화해 보겠습니다.
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
$ graph = new Graphp Graph Graph ();
// create some cities
$ rome = $ graph -> createVertex ( array ( ' name ' => ' Rome ' ));
$ madrid = $ graph -> createVertex ( array ( ' name ' => ' Madrid ' ));
$ cologne = $ graph -> createVertex ( array ( ' name ' => ' Cologne ' ));
// build some roads
$ graph -> createEdgeDirected ( $ cologne , $ madrid );
$ graph -> createEdgeDirected ( $ madrid , $ rome );
// create loop
$ graph -> createEdgeDirected ( $ rome , $ rome );
어떤 도시(Vertex)에 로마로 향하는 도로(즉, 가장자리를 가리키는)가 있는지 살펴보겠습니다.
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
이 라이브러리는 수학적 그래프 이론의 개념을 기반으로 구축되었습니다(즉, 함수 그래프를 그리기 위한 차트 라이브러리가 아닙니다 ). 본질적으로 그래프는 사이에 임의의 수의 연결이 있는 노드 집합입니다. 그래프 이론에서 정점(복수형 정점)은 이러한 노드 의 추상적 표현이고 연결은 가장자리 로 표시됩니다. 모서리는 방향이 지정되지 않을 수도 있고("양방향") 방향이 지정될 수도 있습니다("단방향", 일명 di-edge, 호).
간선 구성 방법에 따라 전체 그래프는 방향이 지정되지 않거나 방향이 있는 그래프(일명 digraph) 또는 혼합 그래프가 될 수 있습니다. 가장자리는 루프를 형성할 수도 있습니다(즉, 정점 A를 다시 가리키는 정점 A의 가장자리). 또한 정점 A에서 정점 B까지의 여러 가장자리(병렬 가장자리라고도 함)도 지원되어 효과적으로 다중 그래프(의사 그래프라고도 함)를 형성합니다. 물론 이들의 모든 조합도 지원됩니다. 많은 작성자가 이러한 핵심 개념을 구별하려고 노력하는 반면, 이 라이브러리는 그래프에 인위적인 제한이나 가정을 적용하지 않으려고 노력합니다.
이 라이브러리는 그래프, 정점, 모서리 및 속성 작업을 위한 핵심 데이터 구조를 제공합니다.
일반적으로 필요한 기능을 제공하기 위해 이러한 구조 위에 구축된 여러 공식 구성 요소가 있습니다. 이 아키텍처를 사용하면 이러한 구성 요소를 독립적으로 필요할 때만 사용할 수 있습니다.
다음은 강조 표시된 일부 구성 요소의 목록입니다. 모든 공식 구성 요소 목록은 graphp 프로젝트에서 찾을 수 있습니다.
이 라이브러리는 그래프 이미지 시각화(웹 페이지 포함), CLI 애플리케이션 내에서 이미지 열기, PNG, JPEG 또는 SVG 파일 형식(기타 형식 포함)으로 내보내기를 지원하도록 구축되었습니다. 그래프 그리기는 그 자체로 복잡한 영역이기 때문에 그래프의 실제 레이아웃은 우수한 GraphViz "그래프 시각화 소프트웨어"에 맡기고 GraphViz와 인터페이스할 수 있는 몇 가지 편리한 API만 제공할 뿐입니다.
자세한 내용은 graphp/graphviz를 참조하세요.
그래프 그리기 외에도 그래프와 관련된 가장 일반적인 작업 중 하나는 일반적인 그래프 문제를 해결하기 위해 알고리즘을 실행하는 것입니다. 따라서 이 라이브러리는 일반적으로 사용되는 여러 그래프 알고리즘 구현의 기초로 사용됩니다.
자세한 내용은 그래프/알고리즘을 참조하세요.
이 라이브러리를 설치하는 권장 방법은 Composer를 사용하는 것입니다. Composer를 처음 사용하시나요?
일단 출시되면 이 프로젝트는 SemVer를 따릅니다. 현재로서는 최신 개발 버전이 설치됩니다.
composer require graphp/graph:^1@dev
버전 업그레이드에 대한 자세한 내용은 CHANGELOG를 참조하세요.
이 프로젝트는 모든 플랫폼에서 실행되는 것을 목표로 하므로 PHP 확장이 필요하지 않으며 기존 PHP 5.3부터 현재 PHP 8+까지의 실행을 지원합니다. 이 프로젝트에는 지원되는 최신 PHP 버전을 사용하는 것이 좋습니다 .
추가 구성 요소 중 일부를 설치할 수도 있습니다. 모든 공식 구성 요소 목록은 graphp 프로젝트에서 찾을 수 있습니다.
이 라이브러리는 광범위한 테스트 스위트를 위해 PHPUnit을 사용합니다. 테스트 스위트를 실행하려면 먼저 이 저장소를 복제한 다음 Composer를 통해 모든 종속성을 설치해야 합니다.
composer install
테스트 스위트를 실행하려면 프로젝트 루트로 이동하여 다음을 실행하십시오.
vendor/bin/phpunit
이 라이브러리는 광범위한 테스트 스위트와 함께 제공되며 실제 세계 에서 정기적으로 테스트 및 사용됩니다. 그럼에도 불구하고 이 라이브러리는 여전히 베타 소프트웨어로 간주되며 API는 변경될 수 있습니다. 변경 로그에는 릴리스 간 업데이트에 대한 모든 관련 정보가 나열됩니다.
문제가 발생하면 주저하지 말고 우리에게 연락하거나, 버그 보고서를 제출하거나, 문제를 재현할 수 있는 패치/풀 요청 및/또는 단위 테스트를 제공하는 것이 가장 좋습니다.
코드로 직접 작업하는 것 외에도 추가 문서, 추가 정보 추가 또는 간단한 오타 수정도 높이 평가됩니다.
어떤 피드백이나 기여도 환영합니다!
irc.freenode.net에서 #graphp를 확인하세요.
이 프로젝트는 허용적인 MIT 라이센스에 따라 릴리스됩니다.
제가 맞춤형 개발 서비스를 제공하고 릴리스 후원 및 기여에 대한 청구서를 발행한다는 사실을 알고 계셨습니까? 자세한 내용은 저(@clue)에게 문의하세요.