Поиск ассоциативных правил. Алгоритм AprioriTid
Объектно-ориентированное программирование в среде Dephi 7. Создание объекта класса. Поиск ассоциативных правил по алгоритму AprioriTid. Построение дерева хеширования. Значение точности для "выходного" правила. Обозначения, используемые в алгоритме.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.11.2013 |
Размер файла | 482,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Государственное образовательное учреждение
высшего профессионального образования
«Омский государственный технический университет»
Кафедра «Автоматизированные системы обработки информации и управления»
Курсовой проект
на тему
«Поиск ассоциативных правил. Алгоритм AprioriTid»
по дисциплине: «Компьютерные системы поддержки принятия решений»
Сургут 2013
Постановка задачи
Используя среду разработки программных приложений Delphi 7.0 и заданные классы, написать модуль экспертной системы, реализующий алгоритм AprioriTid. Программа должна иметь удобный пользовательский интерфейс и обеспечивать действия пользователя в отдельном окне.
Данные для анализа должны храниться в объекте класса TDMInstances.
Работа с данными, выбор переменных и их значений осуществляются в окне, отдельном от окна главной формы экспертной системы.
Описание алгоритма
Алгоритм AprioriTid определяет часто встречающиеся наборы за несколько этапов. На i-м этапе определяются все часто встречающиеся i-элементные наборы. Каждый этап состоит из двух шагов: формирование кандидатов и подсчета поддержки кандидатов.
Рассмотрим i-й этап. На шаге формирования кандидатов алгоритм создает множество кандидатов из i-элементных наборов, чья поддержка пока не вычисляется. На шаге подсчета кандидатов алгоритм сканирует множество транзакций, вычисляя поддержку наборов-кандидатов. После сканирования отбрасываются кандидаты, поддержка которых меньше определенного пользователем минимума, и сохраняются только часто встречающиеся i-элементные наборы. Во время 1-го этапа выбранное множество наборов кандидатов содержит все 1-элементные частые наборы. Алгоритм вычисляет их поддержку во время шага подсчета кандидатов.
Описанный алгоритм можно записать в виде следующего псевдокода:
Опишем обозначения используемые в алгоритме:
§ Lk - множество k-элементных частых наборов, чья поддержка не менье заданной пользователем. Каждый член множества имеет набор упорядоченных (ij < ip, если j < p) элементов F и значение поддержки набора SuppF > Suppmin:
§ Ck - множество кандидатов k-элементных наборов потенциально частых. Каждый член множества имеет набор упорядоченных (ij < ip, если j < p) элементов F и значение поддержки набора Supp.
Опишем данный алгоритм по шагам:
Шаг 1. Присвоить k=1 и выполнить отбор всех 1-элементных наборов, у которых поддержка больше минимально заданной пользователем.
Шаг 2. k = k+1.
Шаг 3. Если не удается создавать k-элементные наборы, то завершить алгоритм, иначе выполнить следующий шаг.
Шаг 4. Создать множество k-элементных наборов кандидатов в частые наборы. Для этого необходимо объединить в k-элементные кандидаты (k-1) - элементные частые наборы. Каждый кандидат сСk будет формироваться путем добавления к (k-1)- элементному частому набору - p элемента из другого (k-1)- элементного частого набора - q. Причем добавляется последний элемент набора q, который по порядку выше, чем последний элемент набора p (p.itemk-1 < q.itemk-1). При этом первые все k-2 элемента обоих наборов одинаковы (p.item1 = q.item1, p.item2 = q.item2, …,
p.itemk-2 = q.itemk-2).
Это может быть записано в виде следующего SQL-подобного запроса.
Шаг 5. Для каждой транзакции Т из множества D выбрать кандидатов С1 из множества Сk, присутствующих в транзакции Т. Для каждого набора из построенного множества Сk удалить набор, если хотя бы одно из его (k-1) множеств не является часто встречающимся, т.е. отсутствует во множестве Lk-1. Это можно записать в виде следующего псевдокода:
Шаг 6. Для каждого кандидата из множества Ck увеличить значение поддержки на единицу.
Шаг 7. Выбрать только кандидатов Lk из множества Сk, у которых значение поддержки больше заданной пользователем Suppmin. Вернуться к шагу 2.
Результатом работы алгоритма является объединение всех множеств Lk для всех k.
Описание классов
unit PredictiveAprioriTid
const
Имя атрибута |
Описание |
|
m_numRandRules |
количество правил для вычисления априорной оценки |
|
m_numIntervals |
количество интервалов для вычисления априорной оценки |
class TDMPredictiveAprioriTid
Секция protected
Имя атрибута |
Тип атрибута |
Описание |
|
m_premiseCount |
integer |
минимальная поддержка |
|
m_numRules |
integer |
требуемое количество правил |
|
m_Ls |
TDMFastVector |
наборы |
|
m_hashtables |
TDMFastVector |
теже наборы в хэш таблице |
|
m_allTheRules |
TDMFastVectorArray |
набор правил |
|
m_instances |
TDMInstances |
вектора на основе которых генерируются правила |
|
m_priors |
TStringHashtable |
хэш таблица с априорными вероятностями |
|
m_midPoints |
DArray |
середина интервалов для априорной оценки |
|
m_expectation |
double |
требуемое значение точности для 'выходного' правила |
|
m_best |
TArrayList |
n лучших правил |
|
m_bestChanged |
boolean |
изменился ли набор из n лучших правил |
|
m_count |
integer |
||
m_priorEstimator |
TDMPriorEstimation |
априорная оценка |
Секция public
Методы |
Имя метода |
Используемые значения |
Описание |
Возвращаемое значение |
|
constructor |
Create |
i1:integer |
создание объекта класса |
||
procedure |
buildModel |
instances : TDMInstances |
Построение дерева хеширования |
||
function |
toStrings |
instances: TDMInstances; Podd : real; Toch : real |
вывод на экран результата работы алгоритма |
TStrings |
|
procedure |
setNumRules |
v : integer |
задает максимальное количество правил для вывода |
||
procedure |
resetOptions |
i1:integer |
задает размер создаваемой модели |
||
destructor |
Destroy |
деструктор класса |
Секция private
Методы |
Имя метода |
Используемые значения |
Описание |
|
procedure |
findLargeItemSets |
- |
поиск наборов |
|
procedure |
findRulesQuickly |
- |
поиск правил |
Текст программы
unit PredictiveAprioriTid;
interface
uses
Classes, FastVector, Instances, uContainers, dmmTypes, PriorEstimation,
SysUtils, ItemSet, dmmConstants, RuleGeneration, RuleItem, DoubleObject,
uConsts, associator, dmm, Windows;
const
//количество правил для вычисления априорной оценки
m_numRandRules = 100;
//количество интервалов для вычисления априорной оценки
m_numIntervals = 10;
type TDMPredictiveApriori = class (TDMAssociator)
protected
//минимальная поддержка
m_premiseCount : integer;
//требуемое количество правил
m_numRules : integer;
//наборы
m_Ls : TDMFastVector;
//теже наборы в хэш таблице
m_hashtables : TDMFastVector;
//набор правил
m_allTheRules : TDMFastVectorArray;
//вектора на основе которых генерируются правила
m_instances : TDMInstances ;
//хэш таблица с априорными вероятностями
m_priors : TStringHashtable ;
//середина интервалов для оаприорной оценки
m_midPoints : DArray;
//требуемое значение точности для 'выходного' правила
m_expectation : double;
//n лучших правил
m_best : TArrayList;
//изменился ли набор из n лучших правил
m_bestChanged : boolean;
m_count : integer;
//априорная оценка
m_priorEstimator : TDMPriorEstimation;
public
//создание объекта класса TDMPredictiveApriori
constructor Create(i1:integer);
//построение дерева хеширования
procedure buildModel(instances : TDMInstances ); override;
//вывод на экран результата работы алгоритма
function toStrings(instances : TDMInstances; Podd : real; Toch : real; number : integer) : TStrings;
procedure setNumRules(v : integer);
procedure resetOptions(i1:integer);
destructor Destroy;override;
private
procedure findLargeItemSets(index : integer);
procedure findRulesQuickly();
end;
implementation
constructor TDMPredictiveApriori.Create(i1:integer);
begin
m_Ls:=nil;
m_hashtables:=nil;
m_allTheRules := nil;
m_instances:=nil;
m_priors:=nil ;
m_midPoints :=nil;
m_best:=nil;
m_best:=nil;
resetOptions(i1);
end;
procedure TDMPredictiveApriori.resetOptions(i1:integer);
begin
// m_numRules := i1;
m_numRules := 1000;
m_premiseCount := 1;
m_best := TArrayList.Create(m_numRules-5);
m_bestChanged := false;
m_expectation := 0;
m_count := 1;
end;
procedure TDMPredictiveApriori.findLargeItemSets(index : integer);
var
kMinusOneSets, kSets : TDMFastVector;
hashtable : TStringHashtable;
currentItemSets : TDMFastVector;
i,j : integer;
begin
kSets := TDMFastVector.Create();
i := 0;
//наборы длины 1
if(index = 1) then
begin
kSets := ItemSet.getSingletons(m_instances);
ItemSet.upDateCounters(kSets, m_instances);
kSets := ItemSet.deleteItemSets(kSets, m_premiseCount,IMAX_VALUE);
if (kSets.size() = 0) then
begin
FreeAndNil(kSets);
exit;
end;
m_Ls.addElement(kSets);
end;
//длина > 1
if(index >1) then
begin
if(m_Ls.size() > 0) then
kSets := m_Ls.lastElement() as TDMFastVector;
m_Ls.removeAllElements();
i := index-2;
kMinusOneSets := kSets;
kSets := ItemSet.mergeAllItemSets(kMinusOneSets, i, m_instances.numInstances());
hashtable := ItemSet.getHashtable(kMinusOneSets, kMinusOneSets.size());
kMinusOneSets.elementMemoryManagement(false);
FreeAndNil(kMinusOneSets);
m_hashtables.addElement(hashtable);
kSets := ItemSet.pruneItemSets(kSets, hashtable);
ItemSet.upDateCounters(kSets, m_instances);
kSets := ItemSet.deleteItemSets(kSets, m_premiseCount,IMAX_VALUE);
if(kSets.size() = 0) then
begin
FreeAnDNil(kSets);
exit;
end;
m_Ls.addElement(kSets);
end;
end;
procedure TDMPredictiveApriori.findRulesQuickly();
var
rules : TDMFastVectorArray;
currentItemSet : TDMRuleGeneration;
j : integer;
currentItemSets : TDMFastVector;
enumItemSets : TDMFastVectorEnumeration;
bestFirst : TDMRuleItem;
PTDMRuleItem : ^TDMRuleItem;
plist : PPointerItemList;
begin
j := 0;
while (j < m_Ls.size()) do
begin
currentItemSets := m_Ls.elementAt(j) as TDMFastVector;
enumItemSets := TDMFastVectorEnumeration.Create(currentItemSets);
while (enumItemSets.hasMoreElements()) do
begin
if (terminated) then
begin
ExitThread(1);
destroy;
end;
currentItemSet := TDMRuleGeneration.Create(enumItemSets.nextElement()as TDMItemSet);
m_best := currentItemSet.generateRules(m_numRules, m_midPoints,m_priors,m_expectation,
m_instances,m_best,m_count);
m_count := currentItemSet.m_count;
if(not m_bestChanged) and (currentItemSet.m_change) then
m_bestChanged := true;
if(m_best.Count > 0) then
begin
plist := m_best.ItemList;
bestFirst:= plist^[0];
m_expectation := (bestFirst).accuracy();
end
else m_expectation := 0;
FreeAndNil(currentItemSet);
end;
FreeAndNil(enumItemSets);
inc(j);
end;
end;
procedure TDMPredictiveApriori.buildModel(instances : TDMInstances );
var
temp,exactNumber : integer;
i,k : integer;
PTDMRuleItem : ^TDMRuleItem;
lastBest : TDMRuleItem;
kSets : TDMFastVector;
plist : PPointerItemList;
begin
temp := m_premiseCount;
exactNumber := m_numRules-5;
if (instances.checkForStringAttributes()) then
raise Exception.Create('Количественные аттрибуты не поддерживаются');
m_instances := TDMInstances.Create(instances);
m_instances.setClassIndex(m_instances.numAttributes()-1);
//априорная оценка
m_priorEstimator := TDMPriorEstimation.Create(m_instances,m_numRandRules,m_numIntervals,false);
m_priors := m_priorEstimator.estimatePrior();
m_midPoints := m_priorEstimator.getMidPoints();
m_Ls := TDMFastVector.Create();
m_hashtables := TDMFastVector.Create();
i := 1;
while (i < m_instances.numAttributes()) do
begin
m_bestChanged := false;
if (terminated) then
begin
ExitThread(1);
destroy;
end;
// поиск наборов
findLargeItemSets(i);
// поиск правил
findRulesQuickly();
if(m_bestChanged) then
begin
temp := m_premiseCount;
while(RuleGeneration.expectation(m_premiseCount, m_premiseCount,m_midPoints,m_priors) <= m_expectation) do
begin
inc(m_premiseCount);
if(m_premiseCount > m_instances.numInstances()) then
break;
end;
end;
if(m_premiseCount > m_instances.numInstances()) then
begin
SetLength(m_allTheRules,3);
m_allTheRules[0] := TDMFastVector.Create();
m_allTheRules[1] := TDMFastVector.Create();
m_allTheRules[2] := TDMFastVector.Create();
k := 0;
while(m_best.count>0) and (exactNumber > 0) do
begin
plist := m_best.itemList;
PTDMRuleItem := plist^[m_best.Count-1];
lastBest := PTDMRuleItem^;
m_allTheRules[0].insertElementAt(lastBest.premise()as TDMItemSet,k);
m_allTheRules[1].insertElementAt(lastBest.consequence() as TDMItemSet,k);
m_allTheRules[2].insertElementAt(TDMDoubleObject.Create(lastBest.accuracy()),k);
m_best.removeAt(m_best.count-1);
inc(k);
dec(exactNumber);
lastBest.OwnValuesCons := false;
FreeAndNil(lastBest);
end;
exit;
end;
if(temp <> m_premiseCount) and (m_Ls.size() > 0) then
begin
kSets := m_Ls.lastElement() as TDMFastVector;
m_Ls.removeElementAt(m_Ls.size()-1);
kSets := ItemSet.deleteItemSets(kSets, m_premiseCount,IMAX_VALUE);
m_Ls.addElement(kSets);
end;
inc(i);
end;
SetLength(m_allTheRules,3);
m_allTheRules[0] := TDMFastVector.Create();
m_allTheRules[1] := TDMFastVector.Create();
m_allTheRules[2] := TDMFastVector.Create();
k := 0;
while(m_best.count>0) and (exactNumber > 0) do
begin
plist := m_best.itemList;
lastBest:= plist^[m_best.Count-1];
m_allTheRules[0].insertElementAt(lastBest.premise() as TDMItemSet,k);
m_allTheRules[1].insertElementAt(lastBest.consequence() as TDMItemSet,k);
m_allTheRules[2].insertElementAt(TDMDoubleObject.Create(lastBest.accuracy()),k);
m_best.removeAt(m_best.count-1);
inc(k);
dec(exactNumber);
lastBest.OwnValuesCons := false;
FreeAndNil(lastBest);
end;
end;
function TDMPredictiveApriori.toStrings(instances : TDMInstances;
Podd : real; Toch : real;
number : integer) : TStrings;
var
strtext : AnsiString;
text : TStrings;
i : integer;
tochn : AnsiString;
podder : String;
TochnReal : real;
PodderReal : real;
val : integer;
begin
text := TStringList.Create;
text.Clear;
if (m_allTheRules[0].size() = 0) then
begin
text.Add('наборы не найдены');
result:=text;
exit;
end;
text.Add(' Apriori');
text.Add('==========');
i := 0;
val := 1;
while ((i < m_allTheRules[0].size()) and (val<=number)) do
begin
Str((((m_allTheRules[1].elementAt(i)) as TDMItemSet).m_counter
/instances.numInstances) : 4 : 5, podder);
PodderReal:=(((m_allTheRules[1].elementAt(i)) as TDMItemSet).m_counter
/instances.numInstances);
Str(((m_allTheRules[2].elementAt(i) as TDMDoubleObject).doubleValue) :4 : 4, tochn);
TochnReal:=((m_allTheRules[2].elementAt(i) as TDMDoubleObject).doubleValue);
if ((TochnReal >= Toch) and (PodderReal >= Podd)) then
begin
strtext:='';
strtext := IntToStr(val)+')' + ' . ' + ((m_allTheRules[0].elementAt(i)) as TDMItemSet).
toString(m_instances) + ' ==> ' + ((m_allTheRules[1].elementAt(i)) as TDMItemSet).
toString(m_instances) +' точность:(';
text.Add(strtext + tochn+')');
text.Add(' поддержка ' + podder);
inc(val);
end;
inc(i);
end;
result := text;
end;
procedure TDMPredictiveApriori.setNumRules(v : integer);
begin
m_numRules := v+5;
end;
destructor TDMPredictiveApriori.Destroy;
var i,j :integer;
first :TDMItemSet;
curItemSets : TDMFastVector;
curItemSetsHashtables : TStringHashtable;
begin
if(m_Ls <> nil) then
begin
j := 0;
while (j < m_Ls.size()) do
begin
curItemSets := m_Ls.elementAt(j) as TDMFastVector;
curItemSets.removeAllElements();
inc(j);
end;
m_Ls.removeAllElements();
m_Ls := nil;
end;
if(m_hashtables <> nil) then
begin
j := 0;
while (j < m_hashtables.size()) do
begin
curItemSetsHashtables := m_hashtables.elementAt(j) as TStringHashtable;
curItemSetsHashtables.OwnValues := true;
FreeAndNil(curItemSetsHashtables);
inc(j);
end;
m_hashtables.removeAllElements();
m_hashtables := nil;
end;
FreeAndNil(m_instances);
//удаление правил
if(length(m_allTheRules)<>0)then
begin
for i:=0 to m_allTheRules[0].size - 1 do
begin
first := m_allTheRules[0].elementAt(i) as TDMItemSet;
first.OwnValues := true;
end;
m_allTheRules[0].removeAndClearAllElements();
m_allTheRules[1].removeAndClearAllElements();
m_allTheRules[2].removeAndClearAllElements();
FreeandNil(m_allTheRules[0]);
FreeandNil(m_allTheRules[1]);
FreeandNil(m_allTheRules[2]);
setlength(m_allTheRules,0);
end;
m_priors.OwnValues:=true;
FreeAndNil(m_priors);
FreeAndNil(m_best);
FreeAndNil(m_priorEstimator);
m_midPoints :=nil;
end;
end.
Пользовательский интерфейс программы
Все свои действия пользователь выполняет в окне, показанном на рис. 1.
Рис.1
Пользователь задает минимальные значения поддержки и достоверности, а также количество лучших правил. Программа выводит все правила, поддержка и достоверность которых больше заданных пользователем. Количество выводимых правил может быть равным или меньшим заданного при запуске алгоритма. Лучшими считаются правила, с наибольшим значением достоверности.
После нажатия кнопки «Начало работы» происходит обработка введенных данных. В итоге получается набор правил, которые в специально предназначенном для этого поле.
Для сохранения данных имеется кнопка «Сохранить».
Для завершения работы с алгоритмом специально предусмотрена кнопка «Выход».
объект класс алгоритм правило
Тестовый пример
Для теста программы загрузим файл
В этом файле имеются следующие поля:
- возраст
- диагноз
- наличие астигматизма
- эффект от линз
- вид линз
Данные для выборки:
Количество лучших правил - 10
Минимальная поддержка - 0,2
Минимальная достоверность - 0,3
Результат работы алгоритма:
PredictiveAprioriTid
===================
1) . tear-prod-rate=reduced 12 ==> contact-lenses=none 12 точность:(0.9452)
поддержка 0.50000
2) . contact-lenses=soft 5 ==> astigmatism=no tear-prod-rate=normal 5 точность:(0.9004)
поддержка 0.20833
3) . spectacle-prescrip=myope contact-lenses=none 7 ==> tear-prod-rate=reduced 6 точность:(0.7984)
поддержка 0.25000
4) . astigmatism=no contact-lenses=none 7 ==> tear-prod-rate=reduced 6 точность:(0.7984)
поддержка 0.25000
5) . spectacle-prescrip=hypermetrope astigmatism=yes 6 ==> contact-lenses=none 5 точность:(0.7468)
поддержка 0.20833
6) . astigmatism=no tear-prod-rate=normal 6 ==> contact-lenses=soft 5 точность:(0.7468)
поддержка 0.20833
7) . contact-lenses=none 15 ==> tear-prod-rate=reduced 12 точность:(0.7303)
поддержка 0.50000
8) . age=presbyopic 8 ==> contact-lenses=none 6 точность:(0.6306)
поддержка 0.25000
9) . spectacle-prescrip=hypermetrope 12 ==> contact-lenses=none 8 точность:(0.5641)
поддержка 0.33333
10) . astigmatism=yes 12 ==> contact-lenses=none 8 точность:(0.5641)
поддержка 0.33333
Вывод
В результате выполнения курсовой работы был получен модуль, выполняющий поиск ассоциативных правил по алгоритму AprioriTid. Программа имеет простой и понятный пользовательский интерфейс и корректно выполняет необходимые действия.
Данный модуль взаимодействует с ядром следующим образом: при запуске ядра в модуль загружаются данные типа Instances, с которыми впоследствии и работает наша программа.
Кроме того, в ходе выполнения курсовой работы нами были получены навыки объектно-ориентированного программирования в среде Dephi 7.
Размещено на Allbest.ur
...Подобные документы
Объектно-ориентированное программирование как методология программирования, опирающаяся на инкапсуляции, полиморфизме и наследовании. Общая форма класса. Наследование как процесс, посредством которого один объект получает свойства другого объекта.
презентация [214,9 K], добавлен 26.10.2013APRIORI - масштабируемый алгоритм поиска ассоциативных правил. Создание официального информационного портала для студенческого совета УлГУ "Династия". Принципы построение и создания хранилища данных. Перенос информационного портала на сервер ulsu.ru.
курсовая работа [1,5 M], добавлен 21.12.2015Классификация задач DataMining. Создание отчетов и итогов. Возможности Data Miner в Statistica. Задача классификации, кластеризации и регрессии. Средства анализа Statistica Data Miner. Суть задачи поиск ассоциативных правил. Анализ предикторов выживания.
курсовая работа [3,2 M], добавлен 19.05.2011Объектно-ориентированное программирование: основная идея, сопровождение, модификация, термины и положения. Понятие объекта как логической единицы, правила (методы) обработки данных. Метод Гаусса для решения систем линейных алгебраических уравнений.
курсовая работа [125,1 K], добавлен 22.04.2009Процесс появления новых знаковых систем для записи алгоритмов. Набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Процедурное, функциональное, объектно-ориентированное программирование.
презентация [912,2 K], добавлен 22.10.2013Классификация задач Data Mining. Задача кластеризации и поиска ассоциативных правил. Определению класса объекта по его свойствам и характеристикам. Нахождение частых зависимостей между объектами или событиями. Оперативно-аналитическая обработка данных.
контрольная работа [26,1 K], добавлен 13.01.2013Методология объектно-ориентированного программирования в Java. Понятия класса, объекта и объектной переменной. Динамическая и статическая объектные модели. Логическое структурирование приложения. Наследование в Java. Отличия интерфейсов от классов.
курс лекций [547,2 K], добавлен 01.05.2014Свойства объектно-ориентированного языка программирования. Понятия инкапсуляции и наследования. Виртуальные функции и полиморфизм. Инициализация экземпляра объекта с помощью конструктора. Динамическое создание объектов. Совместимость объектных типов.
реферат [17,0 K], добавлен 15.04.2015Понятие алгоритма и его характеристики как основного элемента программирования. Формы представления алгоритмов, основные алгоритмические структуры. Структурное и событийно-ориентированное программирование. Объектно-ориентированное программирование.
реферат [86,0 K], добавлен 17.07.2008Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013Понятие объектно-ориентированного программирования, общая характеристика языков высокого уровня. Разработка программного обеспечения для реализации компьютерной игры "пинбол" с помощью императивного программирования в среде Microsoft Visual Basic.
курсовая работа [428,9 K], добавлен 19.09.2012Поиск в массивах и списках, ключ и произвольные данные. Линейный (последовательный) поиск. Бинарный поиск в упорядоченном массиве. Алгоритм Рабина-Карпа, простая и улучшенная хэш-функция. Алгоритм Бойера-Мура со сдвигом по стоп-символам и по суффиксам.
презентация [1,5 M], добавлен 19.10.2014Сбалансированные многоходовые деревья поиска. Исследование структуры B+-дерева, её основные операции. Доказательство их вычислительной сложности. Утверждение о высоте. Поиск, вставка, удаление записи, поиск по диапазону. B+-деревья в системах баз данных.
курсовая работа [705,5 K], добавлен 26.12.2013Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.
презентация [74,8 K], добавлен 14.10.2013Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.
курсовая работа [2,6 M], добавлен 17.11.2014Объектно-ориентированное программирование как новый подход к созданию приложений. Разработка Windows-приложения для поиска информации в хэш-таблице. Анализ использования хеширования для поиска данных и линейного зондирования для разрешения конфликтов.
курсовая работа [915,5 K], добавлен 06.03.2016Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.
учебное пособие [1,6 M], добавлен 28.12.2013Характеристика основных средств обеспечения гибкости моделей в системе КОМПАС-3D. Разработка параметрического эскиза операции, настройка опций в программе. Особенности метода создания ассоциативных чертежей по твердотельным параметрическим моделям.
лабораторная работа [376,7 K], добавлен 25.06.2013Создание программного обеспечения - системы имитационного моделирования на тему "Производственная линия с пунктами технического контроля". Описание входных и выходных данных. Объектно-ориентированное программирование. Диаграммы модулей и процессов.
курсовая работа [1,2 M], добавлен 09.01.2014Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.
курсовая работа [711,4 K], добавлен 27.07.2014