La profundidad y amplitud búsqueda primero: cómo encontrar la relación amigo de tercer grado en una red social

La profundidad y amplitud búsqueda primero: cómo encontrar la relación amigo de tercer grado en una red social

¿Cuál es el algoritmo de "búsqueda"?

Profundidad-primer algoritmo de búsqueda y algoritmo de búsqueda primero en amplitud se basa en el "mapa" vista de esta estructura de datos son una fuerte expresión de esta estructura de datos, la mayor parte de la búsqueda escena del diseño se puede abstraer en un "mapa"

Identificar a partir de un vértice en la figura, la ruta de acceso al otro vértice. Hay muchas maneras, tales como primero en profundidad, primero en amplitud, y A *, IDA * heurística algoritmo de búsqueda y similares, para almacenar la tabla de la figura de adyacencia

public class Graph{   //无向图
	private int v;    //顶点的个数
	private LinkedList<Integer> adj[];  //邻接表
	
	public Graph(int v){
		this.v = v;
		adj = new LinkedList[v];
		for(int i = 0 ; i < v ; ++i){
			adj[i] = new LinkedList<>();
		}
	}
	
	public void addEdge(int s ,int t){   //无向图一条边存两次
		adj[s] .add(t);
		adj[t].add(s);
	}
}

BFS BFS

Primera mirada desde el vértice de inicio más próximo y el próximo más cercano se encuentra a su vez buscar hacia afuera

s representa el vértice de partida, el vértice t es la terminación, busca un camino de s a t, es decir, el camino más corto desde s a t,

vértice visitado se utiliza para registrar se ha accedido, para evitar vértices de acceso repetidas, si se accede al vértice q, una correspondiente visitado [q] está establecido en true

quene es ha sido visitada una cola para almacenar, pero no se ha accedido a los vértices adyacentes al vértice. Debido a que la capa de búsqueda en amplitud por la capa es accesible sólo después de que el ápice de las capas K tienen acceso a la completa, para acceder al primer vértice k + 1 capa, cuando tenemos acceso a la cúspide de la capa K, necesidad de poner la capa K grabar vértice a vértice vienen a través de la primera capa de la capa K + 1 vértice K

ruta de búsqueda de registro prev, cuando se parte de, búsqueda en amplitud el vértice s hasta el vértice T, camino prev se almacena en la matriz, pero este camino es el almacenamiento inversa, prev [w] se almacena en el vértice w de la cual los vértices precursoras atravesar más de, por ejemplo, tenemos acceso a través del vértice adyacente al vértice 3 de la tabla 2, la prev [3] = 2

public void bfs(int s ,int  t){
	if(s == t ) return;
	boolean[] visited = new boolean[v];
	visited[s] = true;
	Quene<Integer> quene = new LinkedList<>();
	quene.add(s);
	int[] prev = new int[v];
	for(int i = 0 ;i < v ;++i){
		prev[i] = -1;
	}
	while(quene.size() != 0){
		int w = quene.poll();
		for(int i = 0 ;i < adj[w].size();++i){
			int q = adj[w].get(i);
			if(!visited[q]){
				prev[q] = w;
				if(q==t){
					print(prev,s,t);
					return;
				}
				visited[q] =true;
				quene.add(q);
			}
		}
	}
}

private void print(int[] prev ,int s ,int  t ){        //递归打印s->t 的路径
	if(prev[t] != -1  && t!= s){
		print(prev,s,prev[t]);
	}
	System.out.print(t+" ");
}

complejidad tiempo es O (V)

DFS búsqueda en profundidad

Profundidad-primera búsqueda para encontrar el camino más corto no es un camino, de hecho, está de vuelta con las ideas, implementado con la recursividad

He encontrado esta variable en particular, el papel es cuando hemos encontrado la terminación vértice t, no vamos a seguir buscando un recursivo

boolean found = false;  //全局变量或者类成员变量

public void dfs(int s ,int  t){
	found = false;
	boolean[] visited = new boolean[v];
	int[] prev = new int[v];
	for(int i =0;i < v;++i){
		prev[i] = -1;
	}
	recurDfs(s,t,visited,prev);
	print(prev,s,t);
}

private void recurDfs(int w,int t ,boolean[] visited,int[] prev){
	if(found == true) return;
	visited[w] = true;
	if(w == t){
		found = true;
		return;
	}
	for(int i = 0 ;i < adj[w].size();++i){
		int q = adj[w].get(i);
		if(!visited[q]){
			prev[q] = w ;
			recurDfs(q,t,visited,prev);
		}
	}
}

Cada borde se le pide como máximo dos veces, una vez atravesado, es una respuesta, el tiempo de complejidad es O (E), E es el número de aristas

¿Cómo encontrar la relación amigo de tercer grado en la red social de un usuario?

Con un algoritmo de búsqueda primero en amplitud, en primer lugar, para atravesar la capa más cercana al vértice vértice de partida, que es, una vez amigos, y luego atravesar la distancia del usuario y el número de lados del vértice 2, la segunda relación amigo tiempo, así como el número de bordes de vértice 3 es tres grados amistad

Publicado 76 artículos originales · ganado elogios 9 · vistas 9189

Supongo que te gusta

Origin blog.csdn.net/ywangjiyl/article/details/104448392
Recomendado
Clasificación