Re: Pathfinding in community

From: Sean (sdemerchREMOVE_at_REMOVEhotmail.com)
Date: 02/01/05


Date: Tue, 01 Feb 2005 13:45:23 -0800

On 1 Feb 2005 01:52:17 -0800, crontab@gmx.de (Martin Berg) reverently
intoned upon the aether:

> Hi,
>
> I am providing a community.
> Each member is able to add his own contacts at the community.
>
> For example:
>
> A knows B
> A knows F
> B knows C
> C knows D
>
> I want to find the shortest path between A and D so that I can display
>
> A knows D because he/she knows C and C knows D
>
> Do you have any solutions? I think a recurive function would work, but
> in my opinion it would be too slow.
>
> I heard about "Dijkstra" or "AStern". Can these alogs help me with my
> problem?
>
> Some facts:
> - PHP
> - Mysql database
> - table "members" with the field "member_id"
> - table "contact" with the fields "member_id", "contact_member_id"

Dijkstra's algorithm is simply a refined breadth first search. You
can find a visual example of it at:

http://www.eas.asu.edu/trace/eee459/sriram.html

A good starting place to learn more with readable pseudo-code:

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

In your case all the edges on the graph have the same weight, so as
already noted, your problem is greatly simplified. It should be noted
here that you still have a directed graph. For instance, in the above
example, A knows D at a cost of 3 (A->B->C->D), but D does not know A.
Or you could choose to make your relationship symmetric. Then A->B
implies B->A. How you choose to handle this affects how to construct
your graph.

In this case, I would suggest first selecting the entire table. Then
I would suggest loading this data into an array of arrays.
Recursively performing database queries could get very expensive in
terms of time and network resources. Then use this array as your map
of the graph. How you create this array depends on if you want your
A->B to imply B->A.

Since all the efficient algorithms I know of for this type of problem
are breadth first, you should use an iterative algorithm. Using
recursion will give a depth first algorithm which will waste CPU time.

I would suggest exploring doing an update every time a user updates
their contacts and storing the results in the database rather than
calculating it all the time as it could get computationally expensive
with a lot of users.

hope this helps,

Sean

"In the End, we will remember not the words of our enemies,
 but the silence of our friends."

- Martin Luther King Jr. (1929-1968)

Photo Archive @ http://www.tearnet.com/Sean
Last Updated 29 Sept. 2004



Relevant Pages

  • Re: Two notions of linear time on a graph
    ... If we look at most linear time algorithms, the size of m does not need ... adjacency list structure in a graph and use it, ... the number of vertices (to set up an array of lists), ... There is another type of algorithm which might be said to run in ...
    (comp.theory)
  • Re: regex question - trying to find ".mp3" in a SELECT box
    ... But `Array' is a Function object reference. ... Establish a new execution context using F's FormalParameterList, ... Since is not a primitive value, the exception should be thrown. ... | 5.2 Algorithm Conventions ...
    (comp.lang.javascript)
  • Re: Mergesort Vs Quicksort
    ... I might not have correctly remembered my algorithm of months ago ... for sorting records in an array using one auxilary of the ... on how things turn out from lower levels of recursion, ... whether the number of records in the array segment to be sorted is ...
    (comp.programming)
  • Re: Chart Performance Problem with Large Data Set
    ... How does this affect the execution time? ... The next thing I saw in your code is that you are using a Workbook to ... supply your graph with data. ... Since your data is in an array already, why don't you just use the array ...
    (microsoft.public.office.developer.web.components)
  • Re: Reference to derived type element by index?
    ... as a set of distinctively-named scalars. ... In another scope, the same common block ... would be a single array. ... algorithm and a specific application of the algorithm, ...
    (comp.lang.fortran)