7

그래프는 틀림없이 가장 다재다능하고 가치있는 모든 데이터 구조입니다. 단일 변수, 목록, 해시 등을 저장하고 물론 그래프를 저장할 수 있습니다.네이티브/구문/인라인 그래프가 지원되는 언어는 무엇입니까?

인라인/네이티브 그래프 지원 및 구문을 제공하는 언어가 있습니까? 루비, 파이썬 및 자바 스크립트에서 변수, 배열, 목록 및 해시를 인라인으로 만들 수 있지만 그래프를 원한다면 매트릭스/목록을 사용하여 표현을 직접 관리하거나 라이브러리를 선택하고 메서드를 통해 그래프를 사용해야합니다. 전화.

왜 2010 년에도 여전히 그렇습니까? 실제로, 인라인 그래프 지원 및 구문을 제공하는 언어가 있습니까?

+0

nPiet : http://www.bertnase.de/npiet/ (참고 :이 농담)를 시도하십시오. –

+0

흥미롭고 유효한 지점. 저는 사람들이 일반적으로 조작하는 그래프의 다양한 특성이 언어에 내장되어 있지 않은지 (또는 표준 라이브러리 AFAIK의 일부 임) 이유라고 생각합니다. 그러나 그래프 재 작성을 기반으로 한 많은 언어가 있지만 일반적으로 프로그래머가 액세스 할 수있는 것이 아니라 장면 뒤에서 발생합니다. – Gian

+0

그래프가 자연적으로 달라진다는 것에 동의하지만 이것이 기본 구현 및 인라인 구문을 제공하지 않는 강력한 이유는 아닙니다. –

답변

2

당신이 묻는 것의 주된 문제는 좀 더 일반적인 해결책이 특정 문제에 대한 최선의 해결책이 아니라는 것입니다. 그것은 모두를위한 평균이지만 최선은 아닙니다.

좋아요, 축퇴를 가정하고 그래프에 목록을 저장할 수는 있지만 왜 그렇게해야합니까? 그리고 그래프 안에 해시 맵을 저장하는 방법은 무엇입니까? 왜 그런 구조가 필요한가요?

그래프 작업을 수행 할 작업을 선택해야한다는 것을 잊지 마십시오. 그렇지 않으면 해시 테이블을 사용하여 값 목록이나 순서가 지정된 컬렉션을 저장하는 목록을 저장하는 것과 같습니다 나무. 당신은 adjacency matrix, edge list 또는 adjacency lists를 사용할 수 있다는 것을 알고 있습니다. 각기 다른 구현은 그 자체의 힘과 약점을 가지고 있습니다.

그래프는 다른 데이터 콜렉션, 순환, 비순환, 지시, 무향, 이단 등등에 비해 실제로 많은 특성을 가질 수 있습니다. 특정 사례에 대해 다른 방법으로 구현할 수 있습니다 (일부 가설 가정). 당신이 필요로하는 그래프에서) 네이티브 구문을 사용하는 것은 어쨌든 어쨌든 구성 할 필요가 있기 때문에 잔인 할 것입니다 (그리고 언어는 많은 구현/최적화를 제공해야합니다).

모든 것이 이미 개발 되었다면 재미있는 부분을 제거하십시오 :) 그냥 자신의 그래프 DSL을 작성하고 함께 살 수있는 언어를 찾아보십시오!

+0

솔직히 말해서, 나는 프로그래밍 가능한 수학 환경의 세계가 흥미로운 것이라고 생각합니다. 나는 그것에 많은 노출을 가지고 있지 않지만, 나는 그들이 존재한다고 가정하고 탐험 할 가치가있는 생각이다, IMHO. –

+0

자바에서는 목록이 필요할 때 기본적으로 ArrayList를 사용하고 필요할 때 LinkedList로 전환합니다. 왜 내가 손쉽게 기본 '최적의 일반 그래프'구현을 할 수 없으며 필요한 경우 언어를 구축 할 수 있습니까? 그래프를 만들 때마다 구현 세부 사항을 재검토하는 것이 정말 재미 없어. 시간 낭비 일뿐입니다. –

+0

보통 그래프가 필요하면 집중적으로 계산해야하기 때문에 행렬이나 인접성 목록을 사용하는 경우 신중하게 생각해야합니다 (일부 연산에서는 반대이므로). 내 Java 구현은 단지 600-700 줄의 코드이며 한 번 썼다. 필요할 때 사용할 수 있지만 몇 가지 속성 만 모델링한다. 실키처럼 많은 수학 환경에서 그래프 구현을 제안한다. – Jack

1

는 GrGen.NET (www.grgen.net) 그래프 변환 플러스 그래픽 디버거를 포함하는 환경을위한 프로그래밍 언어이다. 그래프 모델, 다시 쓰기 규칙 및 규칙 제어를 멋진 특수 언어로 정의하고 원하는 .NET 언어 또는 제공된 셸에서 생성 된 어셈블리/C# 코드를 사용할 수 있습니다.

정상적인 언어가 그래프에 편리하고 내장 된 인터페이스를 제공하지 않는 이유를 이해하려면 해당 프로젝트에 대해 작성된 코드의 양을 살펴보십시오. 컴파일러만으로는 여러 가지 인력이 필요합니다. 이는 프로그래머가 필요로하는 소수의 기능/데이터 구조에 비해 가격이 너무 비싸기 때문에 범용 프로그래밍 언어에는 포함되어 있지 않습니다.