コード例 #1
0
ファイル: main.c プロジェクト: dwelman/push_swap
void	run_sort_algorithms(t_info *info)
{
	t_algo	*best;
	t_algo	*b_sort;
	t_algo	*s_sort;
	t_algo	*d_sort;

	b_sort = new_algo(info);
	s_sort = new_algo(info);
	d_sort = new_algo(info);
	info->in_count = dumb_sort(d_sort, info);
	compress_ops(d_sort->operations, &info->in_count);
	best = d_sort;
	bubble_sort(b_sort, info);
	compress_ops(b_sort->operations, &b_sort->op_count);
	if (b_sort->op_count < best->op_count && stack_sorted(b_sort->stack_a))
		best = b_sort;
	split_sort(s_sort, info);
	print_stacks(s_sort->stack_a, s_sort->stack_b, info);
	print_steps(s_sort->operations);
	compress_ops(s_sort->operations, &s_sort->op_count);
	if (s_sort->op_count < best->op_count && stack_sorted(s_sort->stack_a))
		best = s_sort;
	run_test2(best, info);
	delete_algo(&b_sort);
	delete_algo(&s_sort);
	delete_algo(&d_sort);
}
コード例 #2
0
ファイル: closest_pair.c プロジェクト: maigfrga/coursera-algo
struct OrderedPointArray* split_sort(struct OrderedPointArray *input){
    if(input->x_ordered->length == 1){
        return input;
    }else{
        struct PointArraySplitted *split_array = split_point_array(input->x_ordered);

        struct OrderedPointArray *ordered1 = malloc(sizeof(struct OrderedPointArray));
        ordered1->x_ordered = split_array->array1;
        ordered1->y_ordered = split_array->array1;
        struct OrderedPointArray *arr1 = split_sort(ordered1);
        int p=0;
        struct OrderedPointArray *ordered2 = malloc(sizeof(struct OrderedPointArray));
        ordered2->x_ordered = split_array->array2;
        ordered2->y_ordered = split_array->array2;
        struct OrderedPointArray *arr2 = split_sort(ordered2);


        struct OrderedPointArray *array_ordered = merge_point_array(arr1, arr2);
        return array_ordered;
    }

}
コード例 #3
0
ファイル: closest_pair.c プロジェクト: maigfrga/coursera-algo
struct PointArray* closest_pair(char *filename){
    struct Connection *conn = File_open(filename, "rt");
    struct PointArray *point_array = Connection_process(conn);
    Connection_close(conn);
    struct PointArraySplitted *split_array = split_point_array(point_array);

    struct OrderedPointArray *ordered1 = malloc(sizeof(struct OrderedPointArray));
    ordered1->x_ordered = split_array->array1;
    ordered1->y_ordered = split_array->array1;

    struct OrderedPointArray *ordered2 = malloc(sizeof(struct OrderedPointArray));
    ordered2->x_ordered = split_array->array2;
    ordered2->y_ordered = split_array->array2;

    struct PointArray *result;
    struct OrderedPointArray *result1 = split_sort(ordered1);
    struct OrderedPointArray *result2 = split_sort(ordered2);

    struct OrderedPointArray *result_merged = merge_point_array(result1, result2);
    divide_conquer(result_merged->x_ordered, result_merged->y_ordered);

    return result;
}
コード例 #4
0
ファイル: abwt.hpp プロジェクト: BioinformaticsArchive/Tailor
	/**
	 * @memberof class ABWT< ABSequence<std::string> >
	 * @brief 建構式與程式主體
	 * @param sequence ABSequence<std::string> 原始待排序序列
	 * @param dcs_size uint32_t dcs 參數,攸關dcs大小速度
	 * @param interval_size uint32_t 在建abwt表時所使用的間隔參數,越小越快,記憶體使用越大
	 */
	ABWT (SeqType &sequence, uint32_t dcs_size=512, uint32_t interval_size=64, std::string prefixName="")
		:seq(sequence), len_seq(seq.size()) , dcs_v(dcs_size), abwtt(interval_size), split_size(30000000), _prefixName {prefixName}

	{

		//part 1
		/// @brief 測試
		start = clock();
		// make dcs table
		DIFFERENCE_COVER < SeqType, PreSortType > dcs(seq, dcs_v);

		std::function<bool(INTTYPE, INTTYPE)> dcs_compare_func = std::bind( &DIFFERENCE_COVER < SeqType, PreSortType >::compare, dcs, std::placeholders::_1, std::placeholders::_2);

		stop = clock();
		std::clog << "===================================" << std::endl;
		std::clog << "Create dcs table, time:" << double(stop - start) / CLOCKS_PER_SEC << std::endl;
		std::clog << "===================================" << std::endl;


		//part 2

		start = clock();

		// sort suffix using split sort
		std::cout << "split_size : " << split_size << std::endl;
		//new split sort obj


		Split_sort<	SeqType, std::vector< INTTYPE >, MainSortType > split_sort (seq,dcs_v);
		//setting
		split_sort.getTableV = [](INTTYPE& a){
			return a;
		};
		split_sort.dcs_compare = dcs_compare_func;
		//start split sort
		split_sort.split_by_size_init(split_size);

		// copy sorted result to seq_table(bwt)
		//seq_table.reserve( seq.size() );
		//seq_table.swap(split_sort.Results);
		std::vector<std::string> filenames = split_sort.archive_name;

		//release dcs memory
		std::cout << "release dcs..." << std::endl;
		dcs.release();
		std::cout << "release split sort..." << std::endl;
		split_sort.release();


		stop = clock();
		std::clog << "===================================" << std::endl;
		std::clog << "Create BWT, time:" << double(stop - start) / CLOCKS_PER_SEC << std::endl;
		std::clog << "===================================" << std::endl;


		//part 3

		start = clock();
		// save abwt table

		abwtt.createAllTable(seq, filenames);
		//abwtt.saveBWT("t_bwt.bwt");
		//abwtt.saveTable("t_table.bwt");
		//abwtt.saveSEQ("t_seq.bwt", seq);
		abwtt.saveBWT( _prefixName + "t_bwt.bwt");
		abwtt.saveTable( _prefixName + "t_table.bwt");
		abwtt.saveSEQ( _prefixName + "t_seq.bwt", seq);


		stop = clock();
		std::clog << "===================================" << std::endl;
		std::clog << "Create abwt Table, time:" << double(stop - start) / CLOCKS_PER_SEC << std::endl;
		std::clog << "===================================" << std::endl;

		split_sort.clean_up ();

		return ;

	}