Пример #1
0
/**
 *  実際に圧縮ファイルを作る関数
 *
 **/
void compress(const Node *root, const char *infile)
{
    FILE *ifp;
    FILE *ofp;
    char *p;
    char *outfile;
    SYMBOL c;
    char writeBits = 0;
    int nbit = 0;
    int flag = 0;
    
    // 出力ファイル名の作成
    outfile = change_extention(infile, ".cmpd");
    if ((ifp = fopen(infile, "rb")) == NULL
        || (ofp = fopen(outfile, "wb")) == NULL)
    {
        fprintf(stderr, "error: cannot open %s\n", infile);
        exit(1);
    }
    free(outfile);
    
    // 読みだして変換
    while (1)
    {
        int i;

        if ((flag = fread(&c, sizeof(c), 1, ifp)) == 1)
            p = search_tree(c, root);   // シンボルに対応する符号語を抽出
        else
            p = search_tree(NSYMBOLS - 1, root);   // EOFに対応する符号語を抽出
            
        for (i = 0; p[i] != '\0'; i++)
        {
            writeBits = (writeBits << 1) + (p[i] - '0');
            if (++nbit == 8)
            {
                fwrite(&writeBits, sizeof(char), 1, ofp);
                nbit = writeBits = 0;
            }
        }
        
        // EOFを書き込んだら抜ける
        if (!flag)
            break;
    }

    // 1byteに満たないなら書き込んでしまう
    if (nbit != 0)
    {
        while (nbit != 8)
        {
            writeBits = writeBits << 1; // 0を詰める
            nbit++;
        }
        fwrite(&writeBits, sizeof(char), 1, ofp);
    }
    
    fclose(ifp);
    fclose(ofp);
}
Пример #2
0
int main() {
	int i;
	int RES;
	int L, T, O;
	int A, B, C;
	char str[5];
	scanf("%d%d%d", &L, &T, &O);
	build_tree(1, L, 1);
	while(O--) {
		scanf("%s", str);
		if(str[0] == 'C') {
			scanf("%d%d%d", &A, &B, &C);
			if (A <= B)
				change_tree(A, B, 1, L, C, 1);
			else
				change_tree(B, A, 1, L, C, 1);
		}
		else {
			scanf("%d%d", &A, &B);
			RES = num = 0;
			if (A <= B)
				search_tree(A, B, 1, L, 1);
			else 
				search_tree(B, A, 1, L, 1);
			for(i = 0; i < T; i++) {
				if(num & 1)
					RES++;
				num >>= 1;
			}
			printf("%d\n", RES);
		}
	}
	return 0;
}
binary_tree_t *search_tree(binary_tree_t *tree, int value, int level) {
    binary_tree_t *found = NULL;
    if (tree) {
        if (tree->value == value) {
            found = tree;
        }
        else {
#pragma omp task shared(found) if(level < 10)
            {
                binary_tree_t *found_left = NULL;
                found_left = search_tree(tree->left, value, level + 1);
                if (found_left) {
#pragma omp atomic write
                    found = found_left;
#pragma omp cancel taskgroup
                }
            }
#pragma omp task shared(found) if(level < 10)
            {
                binary_tree_t *found_right = NULL;
                found_right = search_tree(tree->right, value, level + 1);
                if (found_right) {
#pragma omp atomic write
                    found = found_right;
#pragma omp cancel taskgroup
                }
            }
#pragma omp taskwait
        }
    }
    return found;
}
Node* Red_Black_Tree::search_tree(Node* x, int k) {
  if (x == _NIL || x == 0 || x->val == k)
    return x;
  if (k <= x->val)
    return search_tree(x->left, k);
  else
    return search_tree(x->right, k);
}
Пример #5
0
tree *search_tree(tree *l, int x)
{
    if (l == NULL) return (NULL);
    
    if (l->item == x) return(l);
    if (x < l->item)
        return (search_tree(l->left, x));
    else
        return (search_tree(l->right, x));
}
Пример #6
0
int search_tree(int x, struct node *p)
{
  if (p == NULL)
    return 0;

  if (p->data == x)
    return 1;
  else if (p->data > x)
    return search_tree(x, p->left);
  else
    return search_tree(x, p->right);
}
tree *search_tree(tree *t, item_type x)
{
    if (t == NULL)
        return NULL;

    if (t->item == x)
        return t;

    if (t->item > x)
        return search_tree(t->left, x);
    else
        return search_tree(t->right, x);
}
Пример #8
0
bool search_tree (int value, struct node*node) {
    if (node == null) {
        return false;
    }
    if (node-> value == value)
        return true;

    if (node->value < value) {
        return (search_tree (value, node->left));
    } else {
        return (search_tree(value, node->right));
    }
}
Пример #9
0
const tree* search_tree(const tree* t, const void* key,
                        int (*compare_keys)(const void* key1, const void* key2)) {
    if(t == NULL)
        return NULL;

    int cmp = compare_keys(key, t->key);
    if(cmp == 0)
        return t;

    if(cmp < 0)
        return search_tree(t->left, key, compare_keys);
    else
        return search_tree(t->right, key, compare_keys);
}
Пример #10
0
int main(int argc, char *argv[]){
  int i, start_i, end_i;
  unsigned max_length = 1, length_difference = 0;
  int max_end_i = 0, max_start_i = 0;
  unsigned long prime_sum_difference = 0;
  initialize_prime_lists();
  printf("Enter upper limit for search: ");
  scanf("%lu", &max);
  find_all_primes_upto(max);
  printf("Highest prime so far: %lu\n", prime_list[prime_list_top]);
  printf("Highest prime sum so far: %lu\n", prime_sum_list[prime_list_top]);
  /* print_primes(); */
  printf("Max is %lu", max);
  for(end_i = prime_list_top; end_i > 0; end_i--){
    for(start_i = 0;(end_i - start_i + 1) > max_length; start_i++){
      length_difference = end_i - start_i + 1;
      prime_sum_difference = (prime_sum_list[end_i] - prime_sum_list[start_i]) + prime_list[start_i];
      if(length_difference > max_length && prime_sum_difference < max && search_tree(prime_sum_difference)){
          /* printf("\ns:%u e:%u len_diff:%u prime_sum_diff:%lu",start_i, end_i, length_difference, prime_sum_difference); */
          if(max_length < length_difference){
            max_length = length_difference; max_end_i = end_i; max_start_i = start_i;
          }
      }
    }
  }
  printf("\nMAX::start:%u, length:%u, sum_diff:%lu", max_start_i, max_end_i - max_start_i + 1, prime_sum_list[max_end_i] - prime_sum_list[max_start_i] + prime_list[max_start_i]);
  printf("\n");
  return 0;
}
Пример #11
0
// determine the best action by searching ahead using MCTS
extern action_t search(Agent &agent, timelimit_t timelimit) {

    //save agent's state
    ModelUndo undo = ModelUndo(agent);

    SearchNode search_tree(false, agent.numActions());

    //sample
    for(visits_t i = 0; i < timelimit; ++i){    
        search_tree.sample(agent, agent.horizon());
        agent.modelRevert(undo);
    }
    
    // Choose the action that has the highest expected reward.
    // We assume timelimit is large enough so that every action was sampled.
    // This is asserted in main::mainLoop().
    double best_reward = search_tree.child(0)->expectation();
    unsigned int best_action = 0;
    for (unsigned int i = 1; i < agent.numActions(); ++i) {
        if (search_tree.child(i)->expectation() > best_reward) {
            best_reward = search_tree.child(i)->expectation();
            best_action = i;
        }
    }
    
    return best_action;
}
Пример #12
0
void search_tree(int search_item, struct Node *tree){
	//printf("Searching for %d\n", search_item);
	if (tree != NULL){
		
		if (search_item == tree->key){
			printf("Item found.\n");
		}
		else if (search_item < tree->key){
			search_tree(search_item, tree->left);
		}
		else {
			search_tree(search_item, tree->right);
		}
	}
	else printf("Item not found.\n");
}
Пример #13
0
Файл: ai.c Проект: ejrh/ejrh
void evaluate_game(GAME *game, int *vector, int to_depth)
{
    int window[MAX_PLAYERS];
    
    memset(window, 0, sizeof(window));
    search_tree(game, vector, to_depth, window, game->current_player);
}
Пример #14
0
static int search_tree(int id, int node, int max_children, int width,
		       int *parent_id, int *next_max_children, int *depth)
{
	int current, next, next_children;
	int i;

	*depth = *depth + 1;
	current = node + 1;
	next_children = (max_children / width) - 1;

	if (id == current) {
		*parent_id = node;
		*next_max_children = next_children;
		return 1;
	}

	for (i = 1; i <= width; i++) {
		next = current + next_children + 1;
		if (id == next) {
			*parent_id = node;
			*next_max_children = next_children;
			return 1;
		}
		if (id > current && id < next) {
			return search_tree(id, current, next_children, width,
					   parent_id, next_max_children,
					   depth);
		}
		current = next;
	}
	*parent_id = -1;
	*next_max_children = -1;
	return 0;
}
Пример #15
0
Файл: ai.c Проект: ejrh/ejrh
MOVE choose_move(GAME *game, int *best_vector, int to_depth)
{
    int window[MAX_PLAYERS];
    
    memset(window, 0, sizeof(window));    
    return search_tree(game, best_vector, to_depth, window, game->current_player);
}
Пример #16
0
Файл: ai.c Проект: ejrh/ejrh
void evaluate_move(GAME *game, MOVE move, int *vector, int to_depth)
{
    GAME *game2 = clone_game(game);
    int window[MAX_PLAYERS];
    
    memset(window, 0, sizeof(window));
    apply_move(game2, move);
    search_tree(game2, vector, to_depth, window, game2->current_player);

    stack_pop(&game_stack, game2);
}
Пример #17
0
void search_tree(int left, int right, int tleft, int tright, int i) {
	if(left == tleft && right == tright) {
		num = num | result[i][0];
		return ;
	}
	if(result[i][1]) {
		result[i << 1][1] = result[i << 1 | 1][1] = result[i][1];
		result[i << 1][0] = result[i][0];
		result[i << 1 | 1][0] = result[i][0];
		result[i][1] = 0;
	}
	int mid = (tleft + tright) >> 1;
	if(right <= mid)
		search_tree(left, right, tleft, mid, i << 1);
	else if(left >= mid + 1)
		search_tree(left, right, mid + 1, tright, i << 1 | 1);
	else {
		search_tree(left, mid, tleft, mid, i << 1);
		search_tree(mid + 1, right, mid + 1, tright, i << 1 | 1);
	}
}
binary_tree_t *search_tree_parallel(binary_tree_t *tree, int value) {
    binary_tree_t *found = NULL;
#pragma omp parallel shared(found, tree, value)
    {
#pragma omp master
        {
#pragma omp taskgroup
            {
                found = search_tree(tree, value, 0);
            }
        }
    }
    return found;
}
Пример #19
0
int main (int argc, char **argv){  
        struct timeval start, end;
        long mtime, seconds, useconds;  
        init ();
	int count, array_size = 1000*25, read_array_size;
	int array[array_size];
	srand(time(NULL));
	for (count = 0; count < array_size; count++){
	  array[count] = rand();
	}
	struct node *root = create_tree (array_size, 2, array);
	if (argc > 1)
	  read_array_size = atoi (argv[1]);
	else 
	  read_array_size = array_size;
	int read_array[read_array_size];
	int num_iterations = 25;
	long sum_time = 0, ave_time, max_time = 0, min_time;
	int current_iteration = 0;
	while (current_iteration < num_iterations){
	for (count = 0; count < read_array_size; count++){
	  read_array [count] = rand();
	}
        gettimeofday(&start, NULL);
	
	for (count = 0; count < read_array_size; count++){
	  search_tree (array[count % array_size], root);// read_array[count]);
	}
	gettimeofday(&end, NULL);
	seconds  = end.tv_sec  - start.tv_sec;
	useconds = end.tv_usec - start.tv_usec;
	mtime = ((seconds) * 1000 + useconds/1000.0);
	if (current_iteration == 0){
	  min_time = mtime;
	}
	if (mtime > max_time){
	  max_time = mtime;
	}
	if (mtime < min_time){
	  min_time = mtime;
	}
	sum_time = sum_time + mtime;
	current_iteration++;
	}
	ave_time = sum_time / num_iterations;
	printf("%ld,%ld,%ld\n", ave_time, min_time, max_time);
	return 0;
}
Пример #20
0
static void
tree_do_search (WTree * tree, int key)
{
    size_t l;

    l = strlen (tree->search_buffer);
    if ((l != 0) && (key == KEY_BACKSPACE))
        tree->search_buffer[--l] = '\0';
    else if (key && l < sizeof (tree->search_buffer))
    {
        tree->search_buffer[l] = key;
        tree->search_buffer[++l] = '\0';
    }

    if (!search_tree (tree, tree->search_buffer))
        tree->search_buffer[--l] = 0;

    show_tree (tree);
    maybe_chdir (tree);
}
Пример #21
0
int main(int argc, char *argv[])
{
  FILE *fp;
  int i, x;
  struct node *root;

  if (argc != 2) {
    printf("missing file argument\n");
    return 1;
  }

  fp = fopen(argv[1], "r");
  if (fp == NULL) {
    printf("can't open %s\n", argv[1]);
    return 1;
  }

  root = NULL;

  for (i = 0; i < 20; i++) {
    fscanf(fp, "%d", &x);
    root = insert_data(x, root);
  }

  print_tree(root);

  while(1) {
    scanf("%d", &x);
    if (x <= 0)
      break;
    if (search_tree(x, root) == 1)
      printf("%d: Found\n", x);
    else
      printf("%d: Not found\n", x);
  }

  fclose(fp);

  return 0;
}
NearestNeighborOperator<DeviceType>::NearestNeighborOperator(
    MPI_Comm comm, Kokkos::View<Coordinate const **, DeviceType> source_points,
    Kokkos::View<Coordinate const **, DeviceType> target_points )
    : _comm( comm )
    , _indices( "indices" )
    , _ranks( "ranks" )
    , _size( source_points.extent_int( 0 ) )
{
    // NOTE: instead of checking the pre-condition that there is at least one
    // source point passed to one of the rank, we let the tree handle the
    // communication and just check that the tree is not empty.

    // Build distributed search tree over the source points.
    DistributedSearchTree<DeviceType> search_tree( _comm, source_points );

    // Tree must have at least one leaf, otherwise it makes little sense to
    // perform the search for nearest neighbors.
    DTK_CHECK( !search_tree.empty() );

    // Query nearest neighbor for all target points.
    auto nearest_queries = Details::NearestNeighborOperatorImpl<
        DeviceType>::makeNearestNeighborQueries( target_points );

    // Perform the actual search.
    Kokkos::View<int *, DeviceType> indices( "indices" );
    Kokkos::View<int *, DeviceType> offset( "offset" );
    Kokkos::View<int *, DeviceType> ranks( "ranks" );
    search_tree.query( nearest_queries, indices, offset, ranks );

    // Check post-condition that we did find a nearest neighbor to all target
    // points.
    DTK_ENSURE( lastElement( offset ) == target_points.extent_int( 0 ) );

    // Save results.
    // NOTE: we don't bother keeping `offset` around since it is just `[0, 1, 2,
    // ..., n_target_poins]`
    _indices = indices;
    _ranks = ranks;
}
Пример #23
0
int main()
{
	//入力
	printf("start...\n");

	char data[MAX];
	int i = 0;
	int n = 0;
	char c;

	while ((c = getchar()) != EOF) {
		if (c == ' ' || c == '\n') continue;
		data[i] = c;
		i++;
		n++;
	}
	const int N = n;

	Node* origin = (Node*)calloc(sizeof(Node), 1);

	printf("making tree starts ...\n");
	for (i = 0; i < N; i++) origin = make_tree(origin, data+i, N-i);

	char ans[SIZE];

	printf("searching tree starts...\n");
	
	int max_len = search_tree(origin, ans);

	for (i = 1; i <= max_len; i++) {
		printf("%c", ans[i]);
	}
	printf("\n");

	return 0;
}
Пример #24
0
void
reverse_tree_info(int rank, int num_nodes, int width,
		  int *parent, int *num_children,
		  int *depth, int *max_depth)
{
	int max_children;
	int p, c;

	/* sanity check */
	if (rank >= num_nodes) {
		*parent = -1;
		*num_children = -1;
		*depth = -1;
		*max_depth = -1;
		return;
	}

	*max_depth = dep(num_nodes, width);
	if (rank == 0) {
		*parent = -1;
		*num_children = num_nodes - 1;
		*depth = 0;
		return;
	}

	max_children = geometric_series(width, *max_depth);
	*depth = 0;
	search_tree(rank, 0, max_children, width, &p, &c, depth);
	
	if ((rank + c) >= num_nodes)
		c = num_nodes - rank - 1;

	*parent = p;
	*num_children = c;
	return;
}
Пример #25
0
		void search_tree(const char *root, const char *path_from_root, file_enum_t callback, void *userptr)
		{

			DIR *dp = opendir(root);
			if (dp)
			{
				while (dirent *ep = readdir(dp))
				{
					std::string rel_name = std::string(path_from_root) + "/" + ep->d_name;
					std::string full_name = std::string(root) + "/" + ep->d_name;
					if (!strcmp(ep->d_name, ".") || !strcmp(ep->d_name, "..")) {
						continue;
					}

					if (ep->d_type & DT_DIR) {
						search_tree(full_name.c_str(), rel_name.c_str(), callback, userptr);
					}
					else{
						callback(full_name.c_str(), rel_name.substr(1).c_str(), userptr);
					}
				}
				closedir(dp);
			}
		}
Пример #26
0
/* ---------------------------------------------------------------------------
.CSD:  dget

.NAM:  
.SHD:  
.DSC:  Realisierung suchen und Parameter lesen
   - der Inhalt der Parameterstruktur wird bis auf die Komponenten
     xt und lxt grundsaetzlich geloescht,
   - alle fuer die gesuchte Realisierung nicht spezifizierten
     Felder (Zeiger darauf) enthalten den NULL-Poiter!
   - wurde die gesuchte Realisierung nicht gefunden, sind in parms
           bis auf xt/lxt ebenfalls alle anderen Komponenten geloescht!  
.RES:  
.REM:  
.SAL:  
.EXF:  
.END.  
   ---------------------------------------------------------------------------
*/
short dget( DNORM_DCB * stream, short  knr, short rnr, DPARA * parms )
{
   RVB     rvb;
   VRVB    vrvb;
   char *  buffer;    /* Puffer fuer Daten des var.Rea.vorblocks  */
   char *  pt;
   KR_NODE *  node;
   char *  m_xt, * m_vdt;
   short  m_lxt, m_lvdt;
   char    m_dtype[2];
   double  m_dres1, m_dres2, m_dres3, m_dres4, m_dres5;
   long    read_bytes;
#if defined _RISCC_ || defined _OSFC_ || defined _GNUC_ || defined _SUNGC_  || defined _MSCWIN_
   union 
   {
      struct
      {
         char l;
         char h;
      } b;
      short s;
   } val;
#endif

   /* ---------- Pruefung des Argumentstreams ----------
   */
   if ( stream == NULL || stream->fp == NULL )    /* garnicht offen!  */
   {
      derrno = DNERR_CLSTREAM;
      return( EOF );
   } 
   if ( stream->fopen_mode == 'w' || 
        stream->fopen_mode == 'a' )      /* nicht fuer mich! */
   {
      derrno = stream->err = DNERR_NOREADSTREAM;
      return( EOF );
   }

   /* ---------- sind ueberhaupt Realisierungen im Baum? ----------
   */
   if ( !stream->tree || !stream->objects )
   {
      derrno = stream->err = DNERR_NOREADOBJS;
      return( EOF );
   }

   /* ---------- aktuell in parms gesetzte Parameter merken
                 (nur die dateiglobalen) ----------
   */
   m_xt = parms->xt;        
   m_lxt = parms->lxt;                        
   m_vdt = parms->vdt;                         
   m_lvdt = parms->lvdt;
   m_dtype[0] = parms->dtype[0];
   m_dtype[1] = parms->dtype[1];
   m_dres1 = parms->dres1;
   m_dres2 = parms->dres2;
   m_dres3 = parms->dres3;
   m_dres4 = parms->dres4;
   m_dres5 = parms->dres5;

   /* ---------- aktuell in parms gesetzte realis.spezif. Parameter 
                 loeschen ----------
   */
   if ( parms->rb && parms->lrb )
      dn_free( parms->rb );        /* geloescht! und der Speich*/
   if ( parms->rt && parms->lrt )
      dn_free( parms->rt );                     /* fuer alte rb/rt/dt...    */
   if ( parms->dt && parms->ldt )  
      dn_free( parms->dt );                     /* geloescht                */
   if ( parms->ht && parms->lht )  
      dn_free( parms->ht );
   if ( parms->vrt && parms->lvrt )
      dn_free( parms->vrt );

   memset( parms, '\0', sizeof( DPARA ) );  /*                          */

   /* ---------- gemerkte dateiglob.Parms zuruecksetzen ----------
   */
   parms->xt = m_xt;        /* und nun wieder xt-Angaben*/
   parms->lxt = m_lxt;                          /* zurueckspeichern         */
   parms->vdt = m_vdt;        /* auch property desrciption*/
   parms->lvdt = m_lvdt;                        /* zurueckspeichern         */
   parms->dtype[0] = m_dtype[0];
   parms->dtype[1] = m_dtype[1];
   parms->dres1 = m_dres1;
   parms->dres2 = m_dres2;
   parms->dres3 = m_dres3;
   parms->dres4 = m_dres4;
   parms->dres5 = m_dres5;

   /* ---------- Suche der spez. Realisierung im Realis.baum 

  folgende Suchvarianten werden unterstuetzt:

  Fall 1:     1.knr/1.rnr der Datei (FIRST/FIRST)

  Fall 2.1:  naechste knr/rnr der Datei (NEXT/NEXT)
      bei erstem Zugriff auf Datei (identisch
      mit (FIRST/FIRST)

  Fall 2.2:  naechste knr/rnr der Datei (NEXT/NEXT)
      bei Folgezugriff auf Datei.

  Fall 3:     erste rnr bei konstanter knr (knr/FIRST)
  (nicht implementiert)

  Fall 4:     naechste rnr bei erster knr (FIRST/NEXT)
  (nicht implementiert)

  Fall 5:     naechste rnr bei konstanter knr (knr/NEXT)
  (nicht implementiert)

  Fall 6:     erste knr bei konstanter rnr (FIRST/rnr)
  (nicht implementiert)

  Fall 7:     naechste knr bei erster rnr (NEXT/FIRST)
  (nicht implementiert)

  Fall 8:     naechste knr bei konstanter rnr (NEXT/rnr)
  (nicht implementiert)

  Fall 9:     bestimmte knr und bestimmte rnr (knr/rnr)
   */
   /* ---------- Fall 1: ----------   
   */
   if ( knr == FIRST && rnr == FIRST )             /* erste Kl/Real.   */
   {
      if ( node = search_tree( stream->tree,
      stream->knr, stream->rnr,
      SEARCH_FIRST ),       /* erste Realis.    */
     node == NULL || node->rba == EOF )     /* Realisierung  su.*/
      {
         derrno = stream->err = DNERR_NOKRN;
   return( EOF );                                 /* nicht gefunden!  */
      }
   }
   else if ( knr == NEXT && rnr == NEXT )            /* naechste Kl/Real.*/
   {
      /* ---------- Fall 2.1: ----------   
      */
      if ( stream->knr == 0 && stream->rnr == 0 )  /* erster Zugriff   */
      {
   if ( node = search_tree( stream->tree,
         stream->knr, stream->rnr,
         SEARCH_FIRST ),       /* erste Realis.    */
     node == NULL || node->rba == EOF )     /* Realisierung  su.*/
         {
            derrno = stream->err = DNERR_NOKRN;
      return( EOF );                              /* nicht gefunden!  */
         }   
      }
      /* ---------- Fall 2.2: ----------   
      */
      else
      {
   if ( node = search_tree( stream->tree,
         stream->knr, stream->rnr,
         SEARCH_NEXT ),      /* naechste Realis. */
        node == NULL || node->rba == EOF )   /* Realisierung  su.*/
         {
            derrno = stream->err = DNERR_NOKRN;
      return( EOF );                               /* nicht gefunden!  */
         } 
      }
   }
   /* ---------- Fall 9: ----------   
   */
   else              /* normal spezifiz. */
   {
      if ( node = search_tree(  stream->tree, knr,      /* suchen nach knr/ */
        rnr, SEARCH_KRN ),      /* rnr              */
     node == NULL || node->rba == EOF )     /* Realisierung  su.*/
      {
         derrno = stream->err = DNERR_NOKRN;
   return( EOF );                                 /* nicht gefunden!  */
      }   
   }

   /* ---------- tatsaechliche knr/rnr fuer stream merken ----------   
   */
   stream->knr = node->knr;
   stream->rnr = node->rnr;

   /* ---------- konstanten Realisierungsvorblock lesen ----------   
   */
   stream->rvb_rba = node->rba;      /* Beginn des Vorbl. merken */
   fseek( stream->fp, node->rba, SEEK_SET );  /* auf RVB positionieren    */
#if defined _RISCC_ || defined _OSFC_ || defined _GNUC_ || defined _SUNGC_ || defined _MSCWIN_
   read_bytes = read_rvb( &rvb, stream->fp );
#else
   fread( &rvb, (size_t)sizeof( RVB ),
          (size_t)1, stream->fp );     /* ... und RVB einlesen     */
   read_bytes = sizeof( RVB );
#endif

   /* ---------- Rest des Realisierungsvorblocks (variablen
                 Teil) lesen und in vrvb aufbereiten ----------   
   */
   pt = buffer = dn_malloc( ((size_t)rvb.vblocks * BL_SIZE) - read_bytes );

   if(fread( pt, ((size_t)rvb.vblocks * BL_SIZE) - read_bytes,     /* var.Parameter einlesen   */
          (size_t)1, stream->fp ) != 1) {
     derrno = stream->err = DNERR_NOREADSTREAM;
     return( EOF );
   }
   memset( &vrvb, '\0', sizeof( vrvb ) );       /* keine Parameter spezifiz.*/
   pt += sizeof( vrvb.rb_sign );
   vrvb.lrb = *(short *)pt;
#if defined _SUNGC_
   myswab( &vrvb.lrb, sizeof( vrvb.lrb ), 1 );
#endif
   pt += sizeof( vrvb.lrb );
   if ( vrvb.lrb == 0 )                         /* Das keine RB spezifiz.ist*/
   {
      derrno = stream->err = DNERR_BADRB;
      return( EOF );                            /* ist nicht zulaessig!     */
   }
   vrvb.rb = (RB *)pt;
   pt += vrvb.lrb;

   pt += sizeof( vrvb.rt_sign );
   vrvb.lrt = *(short *)pt;
#if defined _SUNGC_
   myswab( &vrvb.lrt, sizeof( vrvb.lrt ), 1 );
#endif
   pt += sizeof( vrvb.lrt );
   if ( vrvb.lrt != 0 )        /* nur, wenn rt spezifiziert*/
      vrvb.rt = pt;                     /* sonst bleibt vrvb.rt NULL*/
   pt += vrvb.lrt;

   pt += sizeof( vrvb.dt_sign );
#if defined _RISCC_ || defined _OSFC_ || defined _GNUC_ || defined _SUNGC_ || defined _MSCWIN_
   val.b.l = *pt++; val.b.h = *pt++; 
   vrvb.ldt = val.s;
#else
   vrvb.ldt = *(short *)pt;
   pt += sizeof( vrvb.ldt );
#endif
#if defined _SUNGC_
   myswab( &vrvb.ldt, sizeof( vrvb.ldt ), 1 );
#endif
   if ( vrvb.ldt != 0 )        /* nur, wenn dt spezifiziert*/
      vrvb.dt = pt;
   pt += vrvb.ldt;

   pt += sizeof( vrvb.ht_sign );
#if defined _RISCC_ || defined _OSFC_ || defined _GNUC_ || defined _SUNGC_ || defined _MSCWIN_
   val.b.l = *pt++; val.b.h = *pt++; 
   vrvb.lht = val.s;
#else
   vrvb.lht = *(short *)pt;
   pt += sizeof( vrvb.lht );
#endif
#if defined _SUNGC_
   myswab( &vrvb.lht, sizeof( vrvb.lht ), 1 );
#endif
   if ( vrvb.lht != 0 )        /* nur, wenn ht spezifiziert*/
      vrvb.ht = pt;
   pt += vrvb.lht;

   pt += sizeof( vrvb.vrt_sign );
#if defined _RISCC_ || defined _OSFC_ || defined _GNUC_ || defined _SUNGC_ || defined _MSCWIN_
   val.b.l = *pt++; val.b.h = *pt++; 
   vrvb.lvrt = val.s;
#else
   vrvb.lvrt = *(short *)pt;
   pt += sizeof( vrvb.lvrt );
#endif
#if defined _SUNGC_
   myswab( &vrvb.lvrt, sizeof( vrvb.lvrt ), 1 );
#endif
   if ( vrvb.lvrt != 0 )      /* nur,wenn vrt spezifiziert*/
      vrvb.vrt = pt;
   pt += vrvb.lvrt;

   /* ---------- alle gelesenen Realisierungsparameter in
                 die Parameterstruktur parms eintragen
                 (wenn spezifiziert) ----------   
   */
   /* ---------- 1. Parameter des konstanter Parameterteils ----------   
   */
   parms->knr = stream->knr;    /* tatsaechliche Klassennnummer     */
   parms->rnr = stream->rnr;    /* tatsaechliche Realisierungsnr.   */
   parms->vanz = rvb.vanz;    /* Vektoranzahl                     */
   parms->vdim = rvb.vdim;    /* Vektordimension                  */
   parms->vsize = rvb.vsize;    /* Vektorgroesse in byte            */
   parms->zf = rvb.zf;      /* Zeitfensterfaktor                */
   parms->fsr = rvb.fsr;    /* Fortsetzrate                     */
   parms->ofs = rvb.ofs;    /* Offset                           */

   parms->rres1 = rvb.rres1;    /* Nutzerspezif. Zellen             */
   parms->rres2 = rvb.rres2;    /* Nutzerspezif. Zellen             */
   parms->rres3 = rvb.rres3;    /* Nutzerspezif. Zellen             */
   parms->rres4 = rvb.rres4;    /* Nutzerspezif. Zellen             */
   parms->rres5 = rvb.rres5;    /* Nutzerspezif. Zellen             */
   parms->rb = dn_malloc( vrvb.lrb +1 );

   /* ---------- lesbare Daten vorhanden? ----------
   */
   if ( !parms->vanz || !parms->vdim || !parms->vsize )
   {
      derrno = stream->err = DNERR_NOREADOBJS;
      return( EOF );
   }

   /* ---------- 2. Parameter variabler Laenge ----------   
   */
   memmove( parms->rb, vrvb.rb, (size_t)vrvb.lrb );
   ((char *)parms->rb)[vrvb.lrb] = '\0';
   parms->lrb = vrvb.lrb;

   if ( vrvb.rt )
   {
      parms->rt = dn_malloc( vrvb.lrt +1 );
      memmove( parms->rt, vrvb.rt, (size_t)vrvb.lrt );
      ((char *)parms->rt)[vrvb.lrt] = '\0';
      parms->lrt = vrvb.lrt;
   }
   if ( vrvb.dt )
   {
      parms->dt = dn_malloc( vrvb.ldt +1 );
      memmove( parms->dt, vrvb.dt, (size_t)vrvb.ldt );
      ((char *)parms->dt)[vrvb.ldt] = '\0';
      parms->ldt = vrvb.ldt;
   }
   if ( vrvb.ht )
   {
      parms->ht = dn_malloc( vrvb.lht +1 );
      memmove( parms->ht, vrvb.ht, (size_t)vrvb.lht );
      ((char *)parms->ht)[vrvb.lht] = '\0';
      parms->lht = vrvb.lht;
   }
   if ( vrvb.vrt )
   {
      parms->vrt = dn_malloc( vrvb.lvrt +1 );
      memmove( parms->vrt, vrvb.vrt, (size_t)vrvb.lvrt );
      ((char *)parms->vrt)[vrvb.lvrt] = '\0';
      parms->lvrt = vrvb.lvrt;
   }

   /* ---------- aktuelle Realisierungsdatenblockgroessen fuer
                 stream merken ----------   
   */
   stream->dat_rba = ftell( stream->fp );  /* Beginn der Daten-blocks  */
   stream->r_rest = rvb.vsize * rvb.vanz;  /* noch zu lesende Datenbyte*/

   /* ---------- Speicherfreigaben ----------   
   */
   dn_free( buffer );

   /* ----- Systemfehler bei File-E/A pruefen -----
   */
   if ( ferror( stream->fp ) )
   {
      perror( "dnorm sys error" );
      exit( 1 );
   }

   derrno = stream->err = DNERR_OK;
   return( 0 );
} /* end of dget() */
Пример #27
0
PNode * kmers_rec(PTree * t, PKey current_key, unsigned int size, unsigned int counter, unsigned char * contig)
{
  unsigned int i,j;
  unsigned int num_bases;
  PKey next_key;
  PNode * current_node;
  PNode * next_node;

  size--;
  counter++;
  // Copia a partir da segunda base sem o caracterer nulo do final
  memcpy(next_key.base,&(current_key.base[1]),current_key.size-1);
  next_key.size = current_key.size-1;
  
  current_node = search_tree(t,next_key);
  next_key.size++;
  
  if(current_node != NULL)
    {
      next_node=NULL;
      num_bases=0;
      for(i=0;i<NUM_BASES;i++)
        if( current_node->base[i]!=NULL)
          if(num_bases++ > 0)
            {
              //contig = (unsigned char *) realloc(contig,sizeof(unsigned char)*(counter+1));
              contig[counter-1]='\0';
              return current_node;
            }
      i=0;
      do {
        if(current_node->base[i]!=NULL)
          {
	    switch(i){ 
	    case 0:
	      next_key.base[current_key.size-1]='A';
	      break;
	    case 1:
	      next_key.base[current_key.size-1]='C';
	      break;
	    case 2:
	      next_key.base[current_key.size-1]='G';
	      break;
	    case 3:
	      next_key.base[current_key.size-1]='T';
	      break;
	    default:
	      next_key.base[current_key.size-1]='\0';
	      current_key.size--;
	      break;
	    }
	    contig = (unsigned char *) realloc(contig,sizeof(unsigned char)*(counter+1));
	    contig[counter]=next_key.base[current_key.size-1];
	    if(size > 0)
	      next_node = kmers_rec(t,next_key,size,counter,contig); // Recursão
	  }
      }while( (i++<NUM_BASES) && (next_node == NULL) );
      return next_node;
    }
  contig[counter-1]='\0';
  return current_node;
}
Пример #28
0
/**
 * shell_app_system_initial_search:
 * @system: A #ShellAppSystem
 * @terms: (element-type utf8): List of terms, logical AND
 *
 * Search through applications for the given search terms.
 *
 * Returns: (transfer container) (element-type ShellApp): List of applications
 */
GSList *
shell_app_system_initial_search (ShellAppSystem  *self,
                                 GSList          *terms)
{
  return search_tree (self, terms, self->priv->visible_id_to_app);
}
Пример #29
0
/**
 * shell_app_system_search_settings:
 * @system: A #ShellAppSystem
 * @terms: (element-type utf8): List of terms, logical AND
 *
 * Search through settings for the given search terms.
 *
 * Returns: (transfer container) (element-type ShellApp): List of setting applications
 */
GSList *
shell_app_system_search_settings (ShellAppSystem  *self,
                                  GSList          *terms)
{
  return search_tree (self, terms, self->priv->setting_id_to_app);
}
Пример #30
0
Файл: ai.c Проект: ejrh/ejrh
MOVE search_tree(GAME *game, int *best_vector, int to_depth, int *window_vector, int window_player)
{
    MOVE moves[MAX_MOVES];
    int num_moves;
    int i;
    MOVE best_move = MOVE_INVALID;
    int player;
    unsigned int hash;

    if (to_depth <= 0 || game_is_over(game))
    {
        evaluate_game_immediate(game, best_vector);
        return best_move;
    }

#ifdef USE_TRANSPOSITION_TABLE_SEARCH
    hash = hash_game(game) % TRANSPOSITION_TABLE_SIZE;

    if (transposition_table[hash][0] != TABLE_UNUSED)
    {
        memcpy(best_vector, transposition_table[hash], sizeof(int)*MAX_PLAYERS);
        hit_count++;
        return best_move;
    }
#endif
    
    num_moves = generate_valid_moves(game, moves);

    player = game->current_player;

    for (i = 0; i < num_moves; i++)
    {
        GAME *game2 = clone_game(game);
        int vector[MAX_PLAYERS];
        MOVE move;

        apply_move(game2, moves[i]);
        node_count++;
        move = search_tree(game2, vector, to_depth - 1, best_vector, player);
        if (move == MOVE_INVALID)
            move = moves[i];

        if (i == 0 || vector[player] > best_vector[player])
        {
            memcpy(best_vector, vector, sizeof(vector));
            best_move = moves[i];
        }

        stack_pop(&game_stack, game2);
        
        /* Prune if this move is so good for the current player that
           the potential value for the window player is less than
           the window. */
        if (vector[player] > parameters.total_score - window_vector[window_player])
        {
            break;
        }
    }

#ifdef USE_TRANSPOSITION_TABLE_SEARCH
    memcpy(transposition_table[hash], best_vector, sizeof(int)*MAX_PLAYERS);
#endif

    return best_move;
}