그래프에서 경로의 컴팩트 한 표현


9

그래프에 간단한 경로의 하위 집합이 있습니다. 경로의 길이는 의해 제한됩니다 .d

선택한 경로 이외의 다른 경로가 표시되지 않도록 경로를 나타낼 수있는 가장 간단한 방법은 무엇입니까 (메모리 방식)?

이 경로의 하위 집합을 반복해서 반복하는 알고리즘 에이 표현을 사용하고 싶습니다. 예를 들어, 표준 압축 알고리즘을 사용할 수 없습니다.

내 마음에 온 하나의 표현은 그것들을 나무의 집합으로 나타내는 것이었다. 최적의 수의 나무로 가져 오는 것이 NP-hard라고 추측합니다. 다른 어떤 표현이 좋을까요?


2
"이 하위 집합을 통해 인용"할 때 각 경로에 대한 정보는 무엇입니까? 길이? 방문한 노드? 다른 경로와의 교차로? ... 개가 많을 수 있으므로 전체 경로를 저장해야하는 경우 "정말 빠르지 않은"준비를해야합니다. 2d
Raphael

나는 당신이 단지 알려지지 않은 프로세스에 의해 경로가 주어 졌는지 알지 못하지만, 관심있는 경로를 계산하는 동안 약간의 부기를 할 수 있습니다. 빠른 아이디어 : 호스트 그래프로 설정하고 각 모서리의 가중치를 0으로 설정하십시오. 당신이이자의 경로를 찾을 때 , 각 모서리의 무게 증가 에 . 마지막으로 가장자리 가중치는 해당 가장자리가 나타나는 경로 수를 나타냅니다. 어쩌면 의 최소 ​​스패닝 트리를 계산하고 가중치 0 또는 그와 비슷한 모든 가장자리를 떨어 뜨릴 수 있습니다. GPGPG
Juho

글쎄, 두 개의 분리되지 않은 간단한 경로의 결합조차도주기를 만들 수 있으므로 MST를 계산하면 내가 생각하는 경로 중 하나를 잃게됩니다. 그러나 위의 내용은 몇 가지 아이디어를 줄 수 있습니다.
Juho

2
당신은에 Eppstein의 용지를 확인 할 수 있습니다 최단 경로, 및 관련 문헌. 그들은 또한 콤팩트 한 표현을 다룹니다. k
Juho

FSM을 사용하여 경로를 나타낼 가능성이 있으며, 조합, 교차로, 빼기 등과 같은 기본 작업을 수행 할 수 있으며 FSM을 최소화하는 "압축"작업은 잘 이해되고 최적이며 효율적입니다. 이 논문에서 이것을 보지 못했지만 다른 비슷한 문제에 대해 제안했습니다 ...
vzn

답변:


4

Trie가 트릭을 수행 할 수 있습니다 : http://en.wikipedia.org/wiki/Trie

그래프의 각 가장자리에 글자를 붙입니다. 그런 다음 그래프를 통과하는 경로를 나타내는 문자열을 트라이에 추가하십시오. "선택한 경로를 제외한 다른 경로가 표시되지 않아야한다"는 요구 사항을 충족하기 위해 루트에서 정점으로 이어지는 모서리가 경로 중 하나를 나타내는 경우를 제외하고 트라이의 모든 정점을 비워두고 모서리에 레이블을 지정할 수 있습니다. 정점에 무언가 레이블을 붙입니다. 부울, 일부 순서의 경로 수 등

일단 당신의 trie가 만들어지면, 그것을 최적의 (또는 거의 최적의) 표현으로 압축하기위한 알고리즘이 있습니다. 링크 된 Wikipedia 기사를 참조하십시오.


흥미 롭군 그러나 trie에는 실제로 신경 쓰지 않는 훨씬 더 큰 사양 세트 (빠른 조회, 키와의 연관 등)가 제공되므로 더 나은 것이 가능한지 궁금합니다 ...
Opt

2

간결한 데이터 구조를 살펴보아야 할 것 입니다. 그것들은 정보-이론적 하한에 가까운 공간에 정보를 저장하려고 시도하면서 정보를 조작하는 능력을 유지하는 데이터 구조입니다.

나무, 사전 등을위한 그러한 구조가 있습니다. 나는 당신이 원하는 것을 정확하게 할 수있는 것을 기억하지는 않지만 아마도 그것들의 조합이나 수정이 당신을 도울 것입니다.


1

알고리즘에 필요한 복잡성 및 사전 / 사후 처리에 따라 가장 간단한 옵션이 방법 일 수 있습니다. 사소하게 배열로 표현하고 HDF5로 압축하여 저장할 수 있습니다. 이 라이브러리에는 일부 빠른 압축 알고리즘이 장착되어 있으므로 압축 된 데이터를 읽고 쓰는 것이 압축되지 않은 것보다 훨씬 빠를 수 있습니다.

다음은 몇 가지 도표입니다.

15GB EArray 및 다른 청크 크기의 요소 당 순차적 액세스 시간 : http://pytables.github.io/_images/seq-chunksize-15GB.png

PyTables에서 Blosc을 사용한 압축 해제 속도 : 여기에 이미지 설명을 입력하십시오

그리고 그들이 길이에 묶여 있다면, 당신은 그것들을 테이블에 저장할 수 있고, 따라서 아마도 더 많은 공간을 얻을 수 있습니다. 메모리에서 검색 할 때 알고리즘을 적용 할 수있는 매우 편리한 형식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.