Ejemplo n.º 1
0
void  tree_union (btree<int> &A, 
	          btree<int> &B, 
	          btree<int> &C, 
	          bool (*fun) (int x,int y,int &z),int undef=0) {
  tree_union (A, A.begin(), B, B.begin(),
	      C, C.begin(), fun, undef);
} 
Ejemplo n.º 2
0
// Esta es la funcion "wrapper" correspondiente. 
void  tree_intersection(btree<int> &A, 
               	        btree<int> &B, 
		        btree<int> &C, 
                        bool (*fun) (int x,int y,int &z)) {
  tree_intersection (A, A.begin(),
		     B, B.begin(),
		     C, C.begin(),
		     fun);
}
Ejemplo n.º 3
0
T reduce (btree <T> & Q,
          T (*f_asociat) (T,T),
          T   v_ini) {
    T z ;
    if (Q.begin() != Q.end())
        z = reduce (Q, Q.begin (), f_asociat, v_ini, f_iden<T>);
    else
        z = v_ini;
    return z ;
}
Ejemplo n.º 4
0
U reduce (btree <T> & Q,
          U (*f_asociat) (U,U),
          U   v_ini,
          U (*f_predica) (T) ) {
    U z ;
    if (Q.begin() != Q.end ())
        z = reduce (Q, Q.begin(), f_asociat, v_ini, f_predica);
    else
        z = v_ini ;
    return z ;
}
Ejemplo n.º 5
0
void find_in_tree(const btree<T> &b, T val) {
  typename btree<T>::const_iterator iter = std::find(b.begin(), b.end(), val);
  if (iter == b.end()) 
    std::cout << val << " not found" << std::endl;
  else
    std::cout << val << " found" << std::endl;
}
Ejemplo n.º 6
0
//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
// Wrapper
void packleft(btree<int> &T) { packleft(T,T.begin()); }
Ejemplo n.º 7
0
bool semejante_p(btree &T,btree &Q) { 
  return semejante_p(T,T.begin(),Q,Q.begin()); 
}
Ejemplo n.º 8
0
void 
huffman(const vector<double> &prob,btree<int> &T) {
  typedef list<huffman_tree> bosque_t;

  // Contiene todos los arboles
  bosque_t bosque;
  // Numero de caracteres del codigo
  int N = prob.size();
  // Crear los arboles iniciales poniendolos en
  // una lista Los elementos de la lista contienen
  // la probabilidad de cada caracter y un arbol
  // con un solo nodo. Los nodos interiores del
  // arbol tienen un -1 (es solo para
  // consistencia) y las hojas tienen el indice
  // del caracter. (entre 0 y N-1)
  for (int j=0; j<N; j++) {
    // Agrega un nuevo elemento a la lista
    bosque_t::iterator htree = 
      bosque.insert(bosque.begin(),huffman_tree());
    htree->p = prob[j];
    htree->T.insert(htree->T.begin(),j);
  }

  // Aqui empieza el algoritmo de Huffman.
  // Tmp va a contener el arbol combinado
  btree<int> Tmp;
  for (int j=0; j<N-1; j++) {
    // En la raiz de Tmp (que es un nodo interior)
    // ponemos un -1 (esto es solo para chequear).
    Tmp.insert(Tmp.begin(),-1);
    // Tmp_p es la probabilidad del arbol combinado
    // (la suma de las probabilidades de los dos subarboles)
    double Tmp_p = 0.0;
    // Para `k=0' toma el menor y lo pone en el
    // hijo izquierdo de la raiz de Tmp. Para `k=1' en el
    // hijo derecho. 
    for (int k=0; k<2; k++) {
      // recorre el `bosque' (la lista de arboles)
      //  busca el menor. `qmin' es un iterator al menor
      bosque_t::iterator q = bosque.begin(), qmin=q;
      while (q != bosque.end()) {
	if (q->p < qmin->p) qmin = q;
	q++;
      }
      // Asigna a `node' el hijo derecho o izquierdo
      // de la raiz de `Tmp' dependiendo de `k'
      btree<int>::iterator node = Tmp.begin();
      node = (k==0 ? node.left() : node.right());
      // Mueve todo el nodo que esta en `qmin'
      // al nodo correspondiente de `Tmp'
      Tmp.splice(node,qmin->T.begin());
      // Acumula las probabilidades
      Tmp_p += qmin->p;
      // Elimina el arbol correspondiente del bosque. 
      bosque.erase(qmin);
    }
    // Inserta el arbol combinado en el bosque
    bosque_t::iterator r = 
      bosque.insert(bosque.begin(),huffman_tree());
    // Mueve todo el arbol de `Tmp' al nodo
    // recien insertado
    r->T.splice(r->T.begin(),Tmp.begin());
    // Pone la probabilidad en el elemento de la
    // lista
    r->p = Tmp_p;
  }
  // Debe haber quedado 1 solo elemento en la lista
  assert(bosque.size()==1);
  // Mueve todo el arbol que quedo a `T'
  T.clear();
  T.splice(T.begin(),bosque.begin()->T.begin());
}
Ejemplo n.º 9
0
// `wrapper'
bool es_menor(btree<int> &T1,btree<int> &T2) {
  return es_menor(T1,T1.begin(),T2, T2.begin());
}
Ejemplo n.º 10
0
bool equalp(btree<int> &A, btree<int> &B, 
	    bool (*eq)(int x,int y)) {
  return equalp(A,A.begin(),B,B.begin(),eq);
}
Ejemplo n.º 11
0
// `wrapper'
int comp_btree(btree<int> &T1, btree<int> &T2,
	    int (*comp)(int x,int y)) {
  comp_btree(T1,T1.begin(),T2,T2.begin(),comp);
}
///void foo(const btree<int> &b) {
void foo(btree<int> &b) {
  std::copy(b.begin(), b.end(), std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
}
Ejemplo n.º 13
0
int cont_nod_prof(btree<int> &A,int prof) {
  return cont_nod_prof (A,A.begin(),prof);
}