복붙노트

[REDIS] 레디 스 : 감독 그래프 가중 구현

REDIS

레디 스 : 감독 그래프 가중 구현

레디 스 사용하여 가중 그래프를 구현하는 가장 좋은 방법은 무엇입니까?

우리는 대부분 (아마도 다 익스트라 알고리즘을 사용하여) 그래프를 통해 최단 경로를 검색합니다

현재 우리는 레디 스에 가장자리를 추가 고려

각 노드에 대해, 우리는 키와 노드 아이디와 참조 노드의 키 SortedSet에있을 것이다 SortedSet의 각 노드 아이디의 점수는 가장자리의 무게입니다.

어떻게 생각해? 내가 잘못 그러나 여기 유일한 안됐다 경우 정정 해줘 우리가 O (1)의 O (logn) 대신 지불 SortedSet의 다음 노드에 대한 각 쿼리에 대한 ...

http://redis.io/commands/zrange

해결법

  1. ==============================

    1.당신은 한 번에 하나의 그들을 점점이 경우 레디 스에 대한 연결의 대기 시간이 작업의 복잡성보다 더 큰 문제가 될 것입니다 경우 소트 세트의 다음 항목을 얻는 것은 오직 O (로그 (N))입니다 .

    당신은 한 번에 하나의 그들을 점점이 경우 레디 스에 대한 연결의 대기 시간이 작업의 복잡성보다 더 큰 문제가 될 것입니다 경우 소트 세트의 다음 항목을 얻는 것은 오직 O (로그 (N))입니다 .

    이 전체 세트를로드하는 의미 (또는 적절한 점수 적어도 그) 로컬 메모리에 노드를 처리 할 때 만드는 있도록 그래프에서 대부분의 작업의 경우, 노드의 모든 가장자리에서 볼 필요가있다. 세트가 매우 작기 때문에 물론 평균 로딩이 뜻은 이미 적당한 경로를 발견했기 때문에 다음,하지만하지 않습니다 일부 가장자리는이 비용은 훨씬 덜 당신이하는 모든 에지 레디 스에 새 통화를보다 것이다 필요한 것.

  2. ==============================

    2.죄송합니다 늦게 것에 대해 :)하지만, 나는 최근에 같은 문제를 건너 왔어요, 내가 해시를 사용하여 모델. 나는 (거의) 모든 것이 공간의 측면에서 효율적인 방법은 해시를 사용하고,이 같은 그래프 정보를 저장하는 것을 말함으로써 로컬 메모리 및 I의 기능 보강에로드되어야한다는 톰 클락슨에 동의 :

    죄송합니다 늦게 것에 대해 :)하지만, 나는 최근에 같은 문제를 건너 왔어요, 내가 해시를 사용하여 모델. 나는 (거의) 모든 것이 공간의 측면에서 효율적인 방법은 해시를 사용하고,이 같은 그래프 정보를 저장하는 것을 말함으로써 로컬 메모리 및 I의 기능 보강에로드되어야한다는 톰 클락슨에 동의 :

    Graph = { node1 : { nodeX : edge_weight, nodeY : edge_weight, other_info: bla..},
              node2 : { nodeZ : edge_weight, nodeE : edge_weight, other_info: bla..},
              bla bla...
            }
    

    당신이 더 많은 공간과 효율성을해야 할 경우, 클라이언트 코드 및 압축 해제 / 가져 오기 / 역 직렬화 (JSON 문자열 수 있습니다 ...) 모든 값을 압축합니다.

  3. from https://stackoverflow.com/questions/6398614/redis-implement-weighted-directed-graph by cc-by-sa and MIT license