TangoTree

Дерева як відомі нелінійні структури, їх внутрішній склад і головні функції. Дослідження системи пошуку TangoTree, принцип її роботи та оцінка ефективності. Опис операцій "Пошук", "Оновлення", "Приєднання", "Вирізати". Програмна реалізація TangoTree.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 29.06.2022
Размер файла 753,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ

ІМЕНІ В.Н.КАРАЗІНА

ФАКУЛЬТЕТ КОМП'ЮТЕРНИХ НАУК

КУРСОВА РОБОТА

з дисципліни «Теорія алгоритмів»

на тему: «TangoTree»

Авдєєнко Микола Андрійович

Харків - 2021

Зміст

Вступ

1. Структура

1.1 Посильне дерево

1.2 Підготовчі доріжки

1.3 Допоміжні дерева

2. Аналіз

2.1 Кордон чергування

2.2 Дерево танго

2.3 Пошук

2.4 Оновлення

3. Алгоритм та програмна реалізація

3.1 Операція «Пошук»

3.2 Операція «Оновлення»

3.3 Операція «Приєднання»

3.4 Операція «Вирізати»

3.5 Програмна реалізація

Висновок

Перелік використаних джерел

Додатки

Вступ

Дерева є відомими нелінійними структурами. Вони зберігають дані не лінійним способом, а впорядковують їх ієрархічно.

Дерево є набір об'єктів, званих вузлами. Вузли з'єднані ребрами. Кожен вузол містить значення чи дані, і може мати чи мати дочірній вузол.

Перший вузол дерева називається коренем. Якщо цей кореневий вузол з'єднаний з іншим вузлом, корінь є батьківським вузлом, а пов'язаний з ним вузол - дочірнім.

Всі вузли дерева з'єднані лініями, які називають ребрами. Це важлива частина дерев, тому що вона керує зв'язком між вузлами.

Листя - це останні вузли на дереві. Це вузли без нащадків. Як і в реальних деревах, тут є корінь, гілки та, нарешті, листя.

Висота дерева - це довжина найдовшого шляху до листа.

Глибина вузла це довжина шляху до його кореня.

Одним з таких дерев є TangoTree.

Об'єкт, мета та предмет дослідження

Курсова робота складається зі вступу, трьох розділів, висновків, списку використаних джерел і одного додатку. Загальний обсяг роботи складає … сторінку, із яких … сторінок основної частини з 8 рисунками, … найменувань списку використаних джерел на 1 сторінці.

Мета курсової роботи: проаналізувати та дослідити TangoTree.

Об'єкт дослідження: система пошуку TangoTree.

Методи дослідження: методи наукового аналізу та досліду.

Результати дослідження: результат аналізу TangoTree в вигляді курсової роботи з висновками, приклад використання структури та готовий малий програмний виріб.

У даній роботі проведено аналіз існуючих засобів рішення проблем котрі використовують TangoTree. Також приведено приклад де можна застосувати цей вид дерева. Також створено програмний виріб з простим алгоритму пошуку.

1. Структура

1.1 Посильне дерево

Щоб створити дерево танго, ми моделюємо повне бінарне дерево пошуку, яке називається посилальним деревом, яке є просто традиційним бінарним деревом пошуку, що містить всі елементи. Це дерево ніколи не з'являється у фактичній реалізації, але є концептуальною основою за такими частинами дерева танго.

Зокрема висота еталонного дерева становить дорівнює довжині найдовшого шляху (), і, отже, розміру найбільшого допоміжного дерева. Зберігаючи допоміжні дерева розумно збалансованими, висота допоміжних дерев може бути обмежена: O (. Це є джерелом Evolution strategy.

1.2 Переважні шляхи

Предтечі дерева. Кожна дитина Node є її останнім відвідуваним дитиною.

По-перше, ми визначаємо для кожного node його попередній нащадок, який неформально є останнім відвідуваним нащадком за допомогою традиційного пошуку в дереві бінарного пошуку. Більш формально розглянемо піддерево «T», що коріниться в «p», з нащадками «l» (ліворуч) та «r» (праворуч). Ми встановлюємо «r» як попередній нижчестоящий елемент «p», якщо останнє доступне node в «T» знаходиться в піддереві, що коріниться в «r», і «l» як попередній нижчестоящий елемент в іншому випадку. Зауважимо, що якщо останнім приєднаним нодом «T» є сам «p», то «l» за визначенням є найкращим дочірнім елементом.

Рисунок 1.1. Переважні шляхи дерева. Переважний дочірній елемент кожного вузла - його останній відвіданий дочірній елемент

Переважний шлях визначається, починаючи з кореня і слідуючи кращим дочірнім елементам, доки досягне кінцевого вузла. Видалення вузлів на цьому шляху поділяє частину дерева, що залишилася, на кілька піддерев, і ми рекурсивно обробляємо кожне поддерево (формуючи кращий шлях від його кореня, який розбиває піддерево на більшу кількість піддерев).

1.3 Допоміжні дерева

Щоб уявити попередній шлях, ми зберігаємо його node у збалансованому бінарному дереві пошуку, а саме червоно-чорному дереві. Для кожного «non-f node n» у попередньому тракті «P» він має «не-pre-child c», який є коренем нового допоміжного дерева. Ми приєднуємо корінь цього іншого допоміжного дерева (c) до «n» в «P», зв'язуючи, таким чином, допоміжні дерева разом. Ми також збільшуємо допоміжне дерево, зберігаючи на кожній ноді мінімальну та максимальну глибину (глибину в опорному дереві, тобто) нодів у підтереві під цим нодом.

2. Аналіз

2.1 Кордон чергування

Щоб знайти нижню межу роботи, яку виконує оптимальне автономне дерево двійкового пошуку, ми знову використовуємо поняття кращих дочірніх елементів. При розгляді послідовності доступу (послідовності пошуків) ми відслідковуємо, скільки разів переважний дочірній вузол посилального дерева перемикається. Загальна кількість перемикань (сумована по всіх вузлах) дає асимптотичну нижню межу роботи, яку виконує будь-який алгоритм двійкового дерева пошуку для даної послідовності доступу. Це називається нижньою межею чергування.

2.2 Дерево танго

Щоб зв'язати це з деревами танго, ми знайдемо верхню межу роботи, яку виконує дерево танго для даної послідовності доступу. Наша верхня межа: , де k - кількість чергувань.

Загальна вартість ділиться на дві частини: пошук елемента та оновлення структури дерева танго для підтримки правильних інваріантів (перемикання бажаних дочірніх елементів та зміна кращих шляхів).

Рисунок 2.1. Tango tree

2.3 Пошук

Щоб побачити, що пошук вписується в цю межу, просто зверніть увагу, що кожного разу, коли пошук по допоміжному дереву виявляється невдалим, і ми повинні переходити до наступного допоміжного дерева, що призводить до кращого дочірнього перемикача (оскільки тепер кращий батьківський шлях перемикає напрямки, щоб приєднатися до кращого дочірнього шляху). Оскільки всі пошуки по допоміжному дереву безуспішні, крім останнього (звісно, ми зупиняємося, коли пошук успішний), ми шукаємо допоміжні дерева. Кожен пошук займає , оскільки розмір допоміжного дерева обмежений , висота дерева посилання.

2.4 Оновлення

Вартість оновлення також укладається в цю межу, тому що нам потрібно виконати лише одне вирізування та одне з'єднання для кожного відвіданого дерева. Одна операція вирізування або з'єднання вимагає лише постійної кількості пошуків, розділень та конкатенацій, кожне з яких займає логарифмічний час у розмірі допоміжного дерева, тому наша вартість оновлення дорівнює .

3. Алгоритм та програмна реалізація

3.1 Операція «Пошук»

Для пошуку елемента у дереві танго ми просто моделюємо пошук у дереві посилань. Ми починаємо з пошуку попереднього шляху, пов'язаного з коренем, яке моделюється шляхом пошуку допоміжного дерева, що відповідає цьому попередньому шляху. Якщо допоміжне дерево не містить бажаного елемента, пошук завершується на батьківському вузлі кореня підлеглого дерева, що містить бажаний елемент (початок іншого попереднього шляху), тому ми просто виконуємо пошук допоміжного дерева для цього попереднього шляху і так далі.

3.2 Операція «Оновлення»

Щоб зберегти структуру дерева танго (допоміжні дерева відповідають передпліччям), ми повинні виконати деяку оновлюючу роботу незалежно від того, які діти зміняться в результаті пошуків. При зміні попереднього дочірнього елемента верхня частина попереднього контуру від'єднується від нижньої частини (яка стає його власним попереднім контуром) і повторно приєднується до іншого попереднього контуру (яка стає новим нижнім контуром). Щоб зробити це ефективно, ми визначимо операції з обробки та об'єднання наших допоміжних дерев.

3.3 Операція «Приєднання»

Наша операція об'єднання буде об'єднувати два допоміжні дерева, доки вони мають властивість, що верхній нод одного (у посилальному дереві) є нащадком нижнього нода іншого (по суті, що відповідні попередні шляхи можуть бути зчеплені). Це буде працювати на основі операції конкатенату червоно-чорних дерев, яка об'єднує два дерева, поки вони мають властивість, що всі елементи одного менші, ніж всі елементи іншого, і розщеплюється, що робить re. Зверніть увагу, що в дереві посилань є два вузли у верхньому контурі, так що вузол знаходиться в нижньому контурі тоді і тільки тоді, коли його ключове значення між ними. Тепер, щоб з'єднати нижній шлях до верхнього шляху, ми просто розділимо верхній шлях між цими двома вузлами, а потім з'єднаємо два результуючі допоміжні дерева по обидва боки від допоміжного дерева нижньої колії, і ми маємо наше останнє, приєднане допоміжне дерево.

3.4 Операція «Вирізати»

Наша операція розрізу розбиває попередню траєкторію на дві частини у цій ноді, верхню частину та нижню частину. Більш формально, він розділить допоміжне дерево на два допоміжні дерева, так що одне містить всі вузли або вище певної глибини в базовому дереві, а інше містить всі вузли нижче цієї глибини. Як у з'єднанні, зверніть увагу, що верхня частина має два вузли, які нижню частину. Таким чином, ми можемо просто розділити на кожному з цих двох вузлів, щоб розділити шлях на три частини, а потім з'єднати два зовнішні, так що ми отримаємо дві частини, верхню та нижню, за бажанням.

3.5 Програмна реалізація

Після компіляції програмного коду, результат роботи даного алгоритму можна побачити на рисунок 3.1, 3.2 та рисунок 3.3.

Рисунок 3.1. Результати максимуму

tangotree пошук дерево програмний

Рисунок 3.2. Результати мінімуму

Рисунок 3.3. Компіляція

Код програми написані у Додатках: А, Б та В

Висновки

Tango Tree - це онлайн-дерево бінарного пошуку, яке забезпечує конкурентне співвідношення щодо офлайн оптимального дерева бінарного пошуку, водночас використовуючи лише додаткові біти пам'яті на нод. Це покращує попереднє найбільш відоме конкурентне співвідношення.

Дерева танго є конкурентними, тому що робота, виконана оптимальним автономним деревом бінарного пошуку, є, принаймні, лінійною в k (загальна кількість переддипломних перемикачів), і робота, виконана деревом танго, є максимальною.

Перелік використаних джерел

1. https://medium.com/nuances-of-programming/Дата звернення: 21.12.2021

2. https://ru.knowledgr.com/03871402/%D0% 94% D0% B5% D1% 80% D0% B5% D0% B2% D0% BE % D0% A2% D0% B0% D0% BD % D0% B3% D0% BE Дата звернення: 22.12.2021

3. https://alumni.dal.ca/dalhousie-originals/erik-demaine-bsc95/ Дата звернення: 21.12.2021

4. https://di.ulb.ac.be/algo/iacono/ Дата звернення: 20.12.2021

5. https://stirileprotv.ro/stiri/actualitate/cel-mai-bun-informatician-roman-s-a-stins-din-viata-in-statele-unite-cine-a-fost-mihai-patrascu.html Дата звернення: 21.12.2021

Додатки

Додаток А (MAIN.C)

#include «tree.h»

#include <sys/time.h>

#include <stdio.h>

#include <time.h>

double wtime()

{

struct timeval t;

gettimeofday (&t, NULL);

return (double) t.tv_sec + (double) t.tv_usec * 1E-6;

}

/* run this program using the console pauser or add your own getch, system («pause») or input loop */

long long count;

long long ii;

long long *a;

int main (int argc, char *argv[]) {

srand (time(NULL));

FILE *datamax = fopen («datamax.dat», «a»); //a - to end file

FILE *datamin = fopen («datamin.dat», «a»); //a - to end file

count = atoi (argv[1]);

a = (long long*) malloc (count * sizeof (long long));

tangoTree *headTangoTree = NULL;

headTangoTree = createTangoTree (getrand (-1000000000,1000000000));

double time = wtime();

for (long long i = 0; i < count - 1; i++) {

headTangoTree = initTangoTree(headTangoTree);

}

long long col = 0, coll;

splayTree *headSplayTrees = NULL;

headSplayTrees = createSplayTrees(headTangoTree);

time = wtime() - time;

printf («\nN=%ld, time =%.12lf», ii, time);

long long max = a[0], imin = 0;

long long min = a[0], imax = 0;

for (long long i = 0; i< ii; i++) {

if (a[i] < min) {

min = a[i];

imin = i;

}

if (a[i] > max) {

max = a[i];

imax = i;

}

}

double time2 = wtime();

struct nodeTree *tst = searchValue (max, headSplayTrees);

for (int i = 0; i < 1000; i++) {

if (tst!= NULL) {

restructTree (tst->value, headSplayTrees);

}

}

time2 = wtime() - time2;

printf («\nN=%ld, %ld time =%.12lf\n\n», ii, max, time2);

double time3 = wtime();

for (int i = 0; i < 1000; i++) {

tst = searchValue (min, headSplayTrees);

if (tst!= NULL) {

restructTree (min, headSplayTrees);

}

}

time3 = wtime() - time3;

printf («\nN=%ld, %ld time =%.16lf», ii, min, time3);

fclose(datamax);

fclose(datamin);

return 0;

}

Додаток Б (tree.c)

#include «tree.h»

extern long long count;

extern long long ii;

extern long long *a;

int getrand (int min, int max)

{

return (double) rand() / (RAND_MAX + 1.0) * (max - min) + min;

}

tangoTree * createTangoTree (long long _value)

{

a [ii++] = _value;

printf («\n % d», _value); //

tangoTree *_tangoTree = (tangoTree *) malloc (sizeof(tangoTree));

if (_tangoTree == NULL) exit(1);

_tangoTree->character = -1;

_tangoTree->value = _value;

_tangoTree->left = NULL;

_tangoTree->right = NULL;

printf («\n % d»,_value); //

return _tangoTree;

}

tangoTree * initTangoTree (tangoTree *_tree)

{

long long _value = getrand (-1000000000,1000000000);

if (_tree == NULL) {

_tree = createTangoTree(_value);

} else {

int isLeft = 0;

tangoTree *cursor = _tree;

tangoTree *prev = NULL;

while (cursor!= NULL) {

prev = cursor;

if (_value <= cursor->value) {

cursor = cursor->left;

isLeft = 1;

} else if (_value > cursor->value) {

cursor = cursor->right;

isLeft = 0;

}

}

if (isLeft == 1) {

prev->left = createTangoTree(_value);

if (prev->right!= NULL) {

prev->character = RIGHT;

}

if (prev->right == NULL) {

prev->character = LEFT;

}

} else if (isLeft == 0) {

prev->character = RIGHT;

prev->right = createTangoTree(_value);

}

}

return _tree;

}

 // - //

splayTree * createSplayTrees (tangoTree *_tangoTree)

{

splayTree *_tree = (splayTree *) malloc (sizeof(splayTree));

if (_tree == NULL) exit(1);

splayTree *cursorSplay = _tree;

tangoTree *cursorTango = _tangoTree;

struct nodeTree *cursorNode = NULL;

struct nodeTree *prev = NULL;

int isLeft = 0;

int flg = 0;

_tree->node = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (_tree->node == NULL) exit(1);

_tree->node->value = _tangoTree->value;

_tree->node->left = NULL;

_tree->node->right = NULL;

_tree->node->nextTree = NULL;

 //

while (1) {

cursorSplay = _tree; //

cursorNode = _tree->node;

while (cursorNode!= NULL) {

prev = cursorNode;

if (cursorNode->value > cursorTango->value) {

cursorNode = cursorNode->left;

isLeft = 1;

} else if (cursorNode->value < cursorTango->value) {

isLeft = 0;

cursorNode = cursorNode->right;

} else {

isLeft = -1;

break;

}

}

if (flg == 1) {

if (isLeft) {

prev->left = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (prev->left == NULL) exit(1);

prev->left->value = cursorTango->value;

prev->right = NULL;

prev->left->left = NULL;

prev->left->right = NULL;

prev->left->nextTree = NULL;

cursorNode = prev->left;

} else {

prev->right = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (prev->right == NULL) exit(1);

prev->right->value = cursorTango->value;

prev->left = NULL;

prev->right->right = NULL;

prev->right->left = NULL;

prev->right->nextTree = NULL;

cursorNode = prev->right;

}

}

flg = 1;

if (cursorTango->character == -1) {

break;

}

if (cursorTango->character == RIGHT) {

if (cursorTango->left!= NULL) {

cursorNode->nextTree = createSplayTrees (cursorTango->left);

}

cursorTango = cursorTango->right;

} else if (cursorTango->character == LEFT) {

if (cursorTango->right!= NULL) {

cursorNode->nextTree = createSplayTrees (cursorTango->right);

}

cursorTango = cursorTango->left;

}

}

int i = 0;

int ctr = rand()%4;

int vect = rand()%2;

while (i < ctr) {

if (_tree->node->left == NULL && _tree->node->right!= NULL) {

if (_tree->node->right->left == NULL) {

_tree->node->right->left = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (_tree->node->right->left == NULL) exit(1);

_tree->node->right->left->left = NULL;

_tree->node->right->left->right = NULL;

_tree->node->right->left->nextTree = _tree->node->nextTree;

_tree->node->right->left->value = _tree->node->value;

struct nodeTree *tmp;

tmp = _tree->node;

_tree->node = _tree->node->right;

free(tmp);

}

} else if (_tree->node->right == NULL && _tree->node->left!= NULL) {

if (_tree->node->left->right == NULL) {

_tree->node->left->right = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (_tree->node->left->right == NULL) exit(1);

_tree->node->left->right->left = NULL;

_tree->node->left->right->right = NULL;

_tree->node->left->right->nextTree = _tree->node->nextTree;

_tree->node->left->right->value = _tree->node->value;

struct nodeTree *tmp;

tmp = _tree->node;

_tree->node = _tree->node->left;

free(tmp);

}

} else if (_tree->node->left!= NULL && _tree->node->right!= NULL) {

if (_tree->node->right->left == NULL && vect == LEFT) {

_tree->node->right->left = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (_tree->node->right->left == NULL) exit(1);

_tree->node->right->left->left = _tree->node->left;

_tree->node->right->left->right = NULL;

_tree->node->right->left->nextTree = _tree->node->nextTree;

_tree->node->right->left->value = _tree->node->value;

struct nodeTree *tmp;

tmp = _tree->node;

_tree->node = _tree->node->right;

free(tmp);

} else if (_tree->node->left->right == NULL && vect == RIGHT) {

_tree->node->left->right = (struct nodeTree *) malloc (sizeof (struct nodeTree));

if (_tree->node->left->right == NULL) exit(1);

_tree->node->left->right->left = NULL;

_tree->node->left->right->right = _tree->node->right;

_tree->node->left->right->nextTree = _tree->node->nextTree;

_tree->node->left->right->value = _tree->node->value;

struct nodeTree *tmp;

tmp = _tree->node;

_tree->node = _tree->node->left;

free(tmp);

}

}

i++;

} //

return _tree;

}

struct nodeTree * searchValue (long long _value, splayTree *_tree)

{

struct nodeTree *cursor = _tree->node;

int searchSuccess = 0;

while (1) {

if (cursor==NULL) {

searchSuccess = 0;

break;

}

if (cursor!= NULL)

if (cursor->left == NULL && cursor->right == NULL &&_value!= cursor->value) {

if (cursor->nextTree!=NULL) {

if (cursor->nextTree->node ==NULL) {

searchSuccess = 0;

break;

}

}

}

if (_value == cursor->value) {

searchSuccess = 1;

break;

}

if (_value < cursor->value) {

if (cursor->left!= NULL) {

cursor = cursor->left;

} else {

if (cursor->nextTree!= NULL) {

cursor = cursor->nextTree->node;

} else {

searchSuccess = 0;

break;

}

}

} else if (_value > cursor->value) {

if (cursor->right!= NULL) {

cursor = cursor->right;

} else {

if (cursor->nextTree!= NULL) {

cursor = cursor->nextTree->node;

} else {

searchSuccess = 0;

break;

}

}

}

}

if (searchSuccess == 1) {

return cursor;

}

return NULL;

}

void restructTree (long long _value, splayTree *_tree)

{

struct nodeTree *cursor = _tree->node;

struct nodeTree *tmp = NULL;

while (1) {

if (cursor->left == NULL && cursor->right == NULL && cursor->nextTree == NULL &&_value!= cursor->value) {

break;

}

if (_value == cursor->value) {

break;

}

if (_value < cursor->value) {

if (cursor->left!= NULL) {

cursor = cursor->left;

continue;

} else {

if (cursor->nextTree!= NULL) {

tmp = cursor->nextTree->node;

cursor->nextTree->node = cursor->right;

cursor->left = tmp;

cursor = cursor->left;

continue;

} else {

break;

}

}

} else if (_value > cursor->value) {

if (cursor->right!= NULL) {

cursor = cursor->right;

continue;

} else {

if (cursor->nextTree!= NULL) {

tmp = cursor->nextTree->node;

cursor->nextTree->node = cursor->left;

cursor->right = tmp;

cursor = cursor->right;

continue;

} else {

break;

}

}

}

}

}

Додаток В (tree.h)

#ifndef TREE_H

#define TREE_H

#include <sys/time.h>

#include <stdio.h>

#include <stdlib.h>

#define LEFT 0

#define RIGHT 1

int getrand (int min, int max);

struct nodeTree;

typedef struct TangoTree {

long long value;

struct TangoTree *left;

struct TangoTree *right;

int character;

} tangoTree;

tangoTree * createTangoTree (long long _value);

tangoTree * initTangoTree (tangoTree *_tree);

typedef struct SplayTree {

struct nodeTree *node;

} splayTree;

struct nodeTree {

long long value;

struct nodeTree *right;

struct nodeTree *left;

struct SplayTree *nextTree;

};

splayTree * createSplayTrees (tangoTree *_tangoTree);

struct nodeTree * searchValue (long long _value, splayTree *_tree);

void restructTree (long long _value, splayTree *_tree);

#endif

Размещено на Allbest.ru


Подобные документы

  • Програмна реалізація алгоритму пошуку найкоротшого шляху між двома будь-якими вершинами графа. Загальні відомості про графи. Особливості роботи в середовищі. Опис структури програми та програмних засобів. Схема програмної реалізації алгоритму Дейкстри.

    курсовая работа [676,7 K], добавлен 20.03.2011

  • Основи роботи антивірусних програм. Сигнатурний та евристичний аналізи. Пошук вірусів, схожих на відомі, що виконують підозрілі дії. Модулі оновлення, планування та управління. ESET NOD32, антивірус Касперського та опис їх основних функцій і переваг.

    реферат [38,3 K], добавлен 12.05.2009

  • Визначення найкращого режиму роботи системи обробки повідомлень. Представлення моделі у вигляді системи масового обслуговування. Визначення структури моделі. Обмеження на зміну величин. Програмна реалізація імітаційної моделі. Оцінка адекватності.

    курсовая работа [153,9 K], добавлен 29.01.2013

  • Дослідження можливостей пошуку в Google за тематикою. Використання можливості розширеного тематичного пошуку для підвищення релевантності пошуку за встановленим завданням. Розширений пошук зображень. Особливості пошуку щодо країн та наукових знань.

    контрольная работа [4,6 M], добавлен 03.02.2014

  • Дослідження проблеми пошуку автомобілів та постановка задачі створення автокаталогу з використанням мови програмування PHP і JаvаScrіpt. Дослідження моделей прецедентів системи та їх класової архітектури. Моделювання розподіленої конфігурації систем.

    курсовая работа [3,7 M], добавлен 11.10.2010

  • Опис організаційної структури автоматизації пошуку кур'єра для виконання замовлення в фірмі "Екіпаж-Сервіс". Побудова умовно замкненої моделі. Побудова дерева цілей і дерева функцій автоматизації. Створення DFD-діаграми та опис форм документів (шаблонів).

    курсовая работа [1,1 M], добавлен 12.04.2014

  • Технологія пошуку інформації в мережі Інтернет. Можливості спеціальних служб, індексів. Інформаційні ресурси у каталогах. Системи мета-пошуку, пошуку в конференціях Usenet, пошуку людей. Знаходження інформації із застосуванням серверів глобального пошуку.

    реферат [38,8 K], добавлен 20.05.2011

  • Використання автоматичних систем інформаційного пошуку для зменшення "інформаційного перевантаження". Методи організації пошуку: атрибутивний, повнотекстовий і вибірка видань. Тематичні каталоги та пошукові машини. Системи Yandex, Rambler та Google.

    реферат [333,0 K], добавлен 18.05.2011

  • Дослідження інструментальних засобів для створення систем спільного навчання. Створення Windows-додатків на основі Visual C#. Функціональні можливості та програмна реалізація системи інтерактивної взаємодії. Програмна реалізація модулю прийому зображення.

    дипломная работа [4,5 M], добавлен 22.10.2012

  • Опис структури даних та вимоги до них. Характеристика файлів та їх призначення. Процедури та функції користувача. Опис стандартних процедур та функцій, що використовувались у програмі. Інструкція для роботи з програмою: програмісту, користувачу.

    курсовая работа [1,2 M], добавлен 21.01.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.