Добавил:
github.com Кофедра ВТ-помойка Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Колинько 4 семестр 2018 / АиСД Курсовая.docx
Скачиваний:
41
Добавлен:
17.11.2018
Размер:
140.72 Кб
Скачать

Список использованных источников

  1. Алгоритмы и структуры данных. – Методические указания к лабораторным работам, практическим занятиям и курсовому проектированию, часть 2, глава 1 «Работа с иерархией объектов: наследование и полиморфизм».

Приложение

Source.cpp

#include "stdafx.h"

#include<iostream>

#include<set>

#include<vector>

#include<algorithm>

#include<iterator>

#include<time.h>

#include <fstream>

#include <chrono>

using namespace std;

class mySet {

public:

set<int> values;

vector<set<int>::iterator> pointers;

char name;

mySet(char n) :name(n) {}

void gen(int n, int mod) {

for (int i = 0; i < n; ++i)

pointers.push_back(values.insert(rand() % (1 + mod)).first);

}

void setOut() {

cout << "\n" << name << " = {";

for (auto it = values.cbegin(); it != values.cend(); ++it)

cout << (*it) << ' ';

cout << "\b}" << endl;

}

void seqOut() {

cout << "\n" << name << " = {";

for (auto it = pointers.cbegin(); it != pointers.cend(); ++it)

cout << (*(*it)) << ' ';

cout << "\b}" << endl;

}

void push_back(int key);

};

void mySet::push_back(int key) {

pointers.push_back(values.insert(key).first);

}

string sub(string str, string del) {

string::size_type pos = str.find(del);

while (pos != string::npos)

{

str.erase(pos, del.size());

pos = str.find(del, pos + 1);

}

return str;

}

int setAnd(mySet A, mySet B, mySet& C) { // &

C.values.clear();

C.pointers.clear();

set_intersection<set<int>::const_iterator, set<int>::const_iterator, insert_iterator<set<int>>>

(A.values.cbegin(), A.values.cend(), B.values.cbegin(), B.values.cend(), inserter(C.values, C.values.begin()));

for (auto it = C.values.cbegin(); it != C.values.cend(); ++it)

C.pointers.push_back(it);

return C.pointers.size();

}

int setDif(mySet A, mySet B, mySet& C) { //-

C.values.clear();

C.pointers.clear();

set_difference<set<int>::const_iterator, set<int>::const_iterator, insert_iterator<set<int>>>

(A.values.cbegin(), A.values.cend(), B.values.cbegin(), B.values.cend(), inserter(C.values, C.values.begin()));

for (auto it = C.values.cbegin(); it != C.values.cend(); ++it)

C.pointers.push_back(it);

return C.pointers.size();

}

int excl(mySet a, mySet b, mySet& C) {

string s1, s2, s3;

vector<int> temp(a.values.begin(), a.values.end()), temp2(b.values.begin(), b.values.end());

for (int i = 0; i < temp.size(); i++)

s1 += temp[i] + '0';

for (int i = 0; i < temp2.size(); i++)

s2 += temp2[i] + '0';

s3 = sub(s1, s2);

for (int i = 0; i < s3.size(); i++)

C.pointers.push_back(C.values.insert((int)s3[i]-'0').first);

return C.values.size();

}

int setSymDif(mySet A, mySet B, mySet& C) { // xor

C.values.clear();

C.pointers.clear();

set_symmetric_difference<set<int>::const_iterator, set<int>::const_iterator, insert_iterator<set<int>>>

(A.values.cbegin(), A.values.cend(), B.values.cbegin(), B.values.cend(), inserter(C.values, C.values.begin()));

for (auto it = C.values.cbegin(); it != C.values.cend(); ++it)

C.pointers.push_back(it);

return C.pointers.size();

}

int subst(mySet& A, mySet B, int p) {

mySet T('A');

int i = 0;

auto itA = A.pointers.cbegin();

for (; itA != A.pointers.cend() && i < p; ++itA, ++i)

T.pointers.push_back(T.values.insert((*(*itA))).first);

for (auto it = B.pointers.cbegin(); it != B.pointers.cend(); ++it)

T.pointers.push_back(T.values.insert((*(*it))).first);

for (; itA != A.pointers.cend(); ++itA)

T.pointers.push_back(T.values.insert((*(*itA))).first);

swap(A, T);

return A.pointers.size();

}

int concat(mySet&A, mySet B) {

for (auto it = B.pointers.cbegin(); it != B.pointers.cend(); ++it)

A.pointers.push_back(A.values.insert((*(*it))).first);

return A.pointers.size();

}

mySet generate(int power)

{

mySet res(0);

for (int i = 0; i < power; i++)

res.push_back(rand() % power);

return res;

}

int main() {

srand(time(nullptr));

mySet a('A'), b('B'), c('C'), d('D'), e('E'), fab('1'), fcd('2'), fabcd('3'), fe('4'), conc('5'), subs('6'),exc('7'), co('8'), te('9');

std::ofstream out;

out.open("in.txt");

out << 190 << std::endl;

for (int power = 100; power < 20000; power+=105) {

try {

int av_power = 0;

a = generate(power);

b = generate(power);

c = generate(power);

d = generate(power);

e = generate(power);

subs = a;

co = a;

std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();

setAnd(a, b, fab);

av_power += fab.pointers.size();

setAnd(c, d, fcd);

av_power += fcd.pointers.size();

setSymDif(fab, fcd, fabcd);

av_power += fabcd.pointers.size();

setDif(fabcd, e, fe);

av_power += fe.pointers.size();

concat(a, b);

av_power += a.pointers.size();

//excl(a, b, exc);

concat(co, b);

av_power += co.pointers.size();

subst(subs,b, 3);

av_power += subs.pointers.size();

std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();

auto dt = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);

av_power /= 7;

out << av_power << " " << dt.count() << std::endl;

//std::cout << av_power << " " << dt.count() << std::endl;

}

catch (std::exception ignored)

{

}

}

out.close();

system("pause");

return 0;

}

Соседние файлы в папке Колинько 4 семестр 2018