Убран отладочный код
This commit is contained in:
parent
6abf49fc23
commit
808cbb28bd
2 changed files with 90 additions and 189 deletions
207
source/app.d
207
source/app.d
|
@ -4,140 +4,43 @@ import std.string;
|
||||||
// Статическая таблица Gear (256 случайных 64-битных чисел)
|
// Статическая таблица Gear (256 случайных 64-битных чисел)
|
||||||
mixin(import("gear.d"));
|
mixin(import("gear.d"));
|
||||||
|
|
||||||
void printDetails(const ubyte[] src, const ulong fingerprint, const size_t i, const size_t mask) {
|
|
||||||
// Отпечаток со сдвигом
|
|
||||||
ulong fpOffset = fingerprint << 1;
|
|
||||||
// Номер байта
|
|
||||||
short charByte = src[i];
|
|
||||||
// Значение gear
|
|
||||||
ulong gearValue = gear[charByte];
|
|
||||||
// Итоговый fingerprint
|
|
||||||
ulong fpResult = fpOffset + gearValue;
|
|
||||||
|
|
||||||
writefln(
|
|
||||||
"\tОтпечаток = %d\n" ~
|
|
||||||
"\tОтпечаток со сдвигом (умножение на 2) = %d\n" ~
|
|
||||||
"\tПолучение байта (0-255) согласно индексу %d из исходной строки = %d\n" ~
|
|
||||||
"\tПолучение значения из таблицы gear согласно номеру байта = %d\n" ~
|
|
||||||
"\tСумма отпечатка со сдвигом с полученным значением из таблицы gear = %d\n" ~
|
|
||||||
"\tБитовое представление текущей маски = %b\n" ~
|
|
||||||
"\tБитовое представление итогового отпечатка = %b\n" ~
|
|
||||||
"\tРезультат наложения маски и отпечатка = %b\n",
|
|
||||||
fingerprint,
|
|
||||||
fpOffset,
|
|
||||||
i, charByte,
|
|
||||||
gearValue,
|
|
||||||
fpResult,
|
|
||||||
mask,
|
|
||||||
fpResult,
|
|
||||||
fpResult & mask
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Функция FastCDC с отладочной информацией
|
// Функция FastCDC с отладочной информацией
|
||||||
ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
|
ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize, size_t normalSize, ulong maskS, ulong maskL)
|
||||||
size_t normalSize, ulong maskS, ulong maskL, size_t chunkNumber, bool debugEnabled)
|
|
||||||
{
|
{
|
||||||
if (n <= minSize)
|
if (n <= minSize)
|
||||||
{
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Ранний возврат: остаток=%d <= минимальный размер=%d, размер чанка=%d",
|
|
||||||
__FUNCTION__, n, minSize, n);
|
|
||||||
}
|
|
||||||
return n;
|
return n;
|
||||||
}
|
|
||||||
if (n > maxSize)
|
if (n > maxSize)
|
||||||
{
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Ограничение n до максимального размера: %d -> %d",
|
|
||||||
__FUNCTION__, n, maxSize);
|
|
||||||
}
|
|
||||||
n = maxSize;
|
n = maxSize;
|
||||||
}
|
|
||||||
if (n < normalSize)
|
if (n < normalSize)
|
||||||
{
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Корректировка нормального размера: %d -> %d",
|
|
||||||
__FUNCTION__, normalSize, n);
|
|
||||||
}
|
|
||||||
normalSize = n;
|
normalSize = n;
|
||||||
}
|
ulong fp = 0;
|
||||||
|
|
||||||
ulong fingerprint = 0;
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
// Инициализация fp для первых minSize байт (без проверки cut-point)
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Начало обработки чанка %d, остаток=%d, " ~
|
|
||||||
"минимальный размер=%d, нормальный размер=%d, максимальный размер=%d",
|
|
||||||
__FUNCTION__, chunkNumber, n, minSize, normalSize, maxSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Инициализация fingerprint (отпечатка) для первых minSize байт (без проверки cut-point)
|
|
||||||
while (i < minSize)
|
while (i < minSize)
|
||||||
{
|
{
|
||||||
fingerprint = (fingerprint << 1) + gear[src[i]];
|
fp = (fp << 1) + gear[src[i]];
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Фаза инициализации, индекс=%d, байт=%d, fingerprint=%d",
|
|
||||||
__FUNCTION__, i, src[i], fingerprint);
|
|
||||||
}
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Цикл до normalSize (строгая маска)
|
// Цикл до normalSize (строгая маска)
|
||||||
while (i < normalSize)
|
while (i < normalSize)
|
||||||
{
|
{
|
||||||
printDetails(src, fingerprint, i, maskS);
|
fp = (fp << 1) + gear[src[i]];
|
||||||
fingerprint = (fingerprint << 1) + gear[src[i]];
|
if ((fp & maskS) == 0)
|
||||||
ulong masked = fingerprint & maskS;
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
{
|
||||||
writefln("%s: Фаза строгой маски, индекс=%d, байт=%d, fingerprint=%d, fingerprint & maskS=%d",
|
|
||||||
__FUNCTION__, i, src[i], fingerprint, masked);
|
|
||||||
}
|
|
||||||
if (masked == 0)
|
|
||||||
{
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Найдена точка разбиения на индексе=%d (строгая маска), размер чанка=%d",
|
|
||||||
__FUNCTION__, i, i);
|
|
||||||
}
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Цикл после (слабая маска)
|
// Цикл после (слабая маска)
|
||||||
while (i < n)
|
while (i < n)
|
||||||
{
|
{
|
||||||
printDetails(src, fingerprint, i, maskL);
|
fp = (fp << 1) + gear[src[i]];
|
||||||
fingerprint = (fingerprint << 1) + gear[src[i]];
|
if ((fp & maskL) == 0)
|
||||||
ulong masked = fingerprint & maskL;
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
{
|
||||||
writefln("%s: Фаза слабой маски, индекс=%d, байт=%d, fingerprint=%d, fingerprint & maskL=%d",
|
|
||||||
__FUNCTION__, i, src[i], fingerprint, masked);
|
|
||||||
}
|
|
||||||
if (masked == 0)
|
|
||||||
{
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Найдена точка разбиения на индексе=%d (слабая маска), размер чанка=%d",
|
|
||||||
__FUNCTION__, i, i);
|
|
||||||
}
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
|
||||||
|
|
||||||
if (debugEnabled)
|
|
||||||
{
|
|
||||||
writefln("%s: Точка разбиения не найдена, возвращается максимальный размер=%d",
|
|
||||||
__FUNCTION__, n);
|
|
||||||
}
|
}
|
||||||
return n; // Достигнут max
|
return n; // Достигнут max
|
||||||
}
|
}
|
||||||
|
@ -145,78 +48,7 @@ ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize,
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// Текст без переносов строк, \n заменены на пробел
|
// Текст без переносов строк, \n заменены на пробел
|
||||||
string text = "Цель науки о данных — улучшить процесс принятия решений, " ~
|
mixin(import("text.d"));
|
||||||
"основывая их на более глубоком понимании ситуации с помощью " ~
|
|
||||||
"анализа больших наборов данных. Как область деятельности " ~
|
|
||||||
"наука о данных включает в себя ряд принципов, методов " ~
|
|
||||||
"постановки задач, алгоритмов и процессов для выявления " ~
|
|
||||||
"скрытых полезных закономерностей в больших наборах данных. " ~
|
|
||||||
"Она тесно связана с глубинным анализом данных и машинным " ~
|
|
||||||
"обучением, но имеет более широкий охват. Сегодня наука о " ~
|
|
||||||
"данных управляет принятием решений практически во всех " ~
|
|
||||||
"сферах современного общества. В повседневной жизни вы " ~
|
|
||||||
"ощущаете на себе воздействие науки о данных, когда видите " ~
|
|
||||||
"отобранные специально для вас рекламные объявления, " ~
|
|
||||||
"рекомендованные фильмы и книги, ссылки на предполагаемых " ~
|
|
||||||
"друзей, отфильтрованные письма в папке со спамом, " ~
|
|
||||||
"персональные предложения от мобильных операторов и " ~
|
|
||||||
"страховых компаний. Она влияет на порядок переключения и " ~
|
|
||||||
"длительность сигналов светофоров в вашем районе, на то, как " ~
|
|
||||||
"были созданы новые лекарства, продающиеся в аптеке, и то, как " ~
|
|
||||||
"полиция вычисляет, где может потребоваться ее присутствие. " ~
|
|
||||||
"Рост использования науки о данных в обществе обусловлен " ~
|
|
||||||
"появлением больших данных и социальных сетей, увеличением " ~
|
|
||||||
"вычислительной мощности, уменьшением размеров носителей " ~
|
|
||||||
"компьютерной памяти и разработкой более эффективных " ~
|
|
||||||
"методов анализа и моделирования данных, таких как глубокое " ~
|
|
||||||
"обучение. Вместе эти факторы означают, что сейчас процесс " ~
|
|
||||||
"сбора, хранения и обработки данных стал как никогда ранее " ~
|
|
||||||
"доступен для организаций. В то же время эти технические " ~
|
|
||||||
"новшества и растущее применение науки о данных означают, что " ~
|
|
||||||
"этические проблемы, связанные с использованием данных и " ~
|
|
||||||
"личной конфиденциальностью, тоже вышли на первый план. Цель " ~
|
|
||||||
"этой книги — познакомить с наукой о данных на уровне ее " ~
|
|
||||||
"основных элементов и с той степенью погружения, которая " ~
|
|
||||||
"обеспечит принципиальное понимание вопроса. " ~
|
|
||||||
"Глава 1 очерчивает область науки о данных и дает краткую " ~
|
|
||||||
"историю ее становления и эволюции. В ней мы также " ~
|
|
||||||
"рассмотрим, почему наука о данных стала такой востребованной " ~
|
|
||||||
"сегодня, и перечислим факторы, стимулирующие ее внедрение. В " ~
|
|
||||||
"конце главы мы развенчаем несколько мифов, связанных с темой " ~
|
|
||||||
"книги. Глава 2 вводит фундаментальные понятия, относящиеся к " ~
|
|
||||||
"данным. В ней также описаны стандартные этапы проекта: " ~
|
|
||||||
"понимание бизнес-целей, начальное изучение данных, " ~
|
|
||||||
"подготовка данных, моделирование, оценка и внедрение. Глава 3 " ~
|
|
||||||
"посвящена инфраструктуре данных и проблемам, связанным с " ~
|
|
||||||
"большими данными и их интеграцией из нескольких источников. " ~
|
|
||||||
"Одна из таких типичных проблем заключается в том, что данные " ~
|
|
||||||
"в базах и хранилищах находятся на одних серверах, а " ~
|
|
||||||
"анализируются на других. Поэтому колоссальное время тратится " ~
|
|
||||||
"на перемещение больших наборов данных между этими " ~
|
|
||||||
"серверами. Глава 3 начинается с описания типичной " ~
|
|
||||||
"инфраструктуры науки о данных для организации и некоторых " ~
|
|
||||||
"свежих решений проблемы перемещения больших наборов " ~
|
|
||||||
"данных, а именно: метода машинного обучения в базе данных, " ~
|
|
||||||
"использования Hadoop для хранения и обработки данных, а также " ~
|
|
||||||
"разработки гибридных систем, в которых органично сочетаются " ~
|
|
||||||
"традиционное программное обеспечение баз данных и решения, " ~
|
|
||||||
"подобные Hadoop. Глава завершается описанием проблем, " ~
|
|
||||||
"связанных с интеграцией данных в единое представление для " ~
|
|
||||||
"последующего машинного обучения. Глава 4 знакомит читателя с " ~
|
|
||||||
"машинным обучением и объясняет некоторые из наиболее " ~
|
|
||||||
"популярных алгоритмов и моделей, включая нейронные сети, " ~
|
|
||||||
"глубокое обучение и деревья решений. В главе 5 основное " ~
|
|
||||||
"внимание уделяется использованию опыта в области машинного " ~
|
|
||||||
"обучения для решения реальных задач, приводятся примеры " ~
|
|
||||||
"анализа стандартных бизнес-проблем и того, как они могут быть " ~
|
|
||||||
"решены с помощью машинного обучения. В главе 6 " ~
|
|
||||||
"рассматриваются этические вопросы науки о данных, последние " ~
|
|
||||||
"разработки в области регулирования и некоторые из новых " ~
|
|
||||||
"вычислительных методов защиты конфиденциальности в " ~
|
|
||||||
"процессе обработки данных. Наконец, в главе 7 описаны сферы, " ~
|
|
||||||
"на которые наука о данных окажет наибольшее влияние в " ~
|
|
||||||
"ближайшем будущем, изложены принципы, позволяющие " ~
|
|
||||||
"определить, будет ли данный конкретный проект успешным.";
|
|
||||||
|
|
||||||
// Конвертация в ubyte[] (UTF-8)
|
// Конвертация в ubyte[] (UTF-8)
|
||||||
ubyte[] data = cast(ubyte[]) text;
|
ubyte[] data = cast(ubyte[]) text;
|
||||||
|
@ -232,30 +64,27 @@ void main()
|
||||||
// ulong maskS = (1UL << 8) - 1; // 8 бит: 0b11111111
|
// ulong maskS = (1UL << 8) - 1; // 8 бит: 0b11111111
|
||||||
// ulong maskL = (1UL << 4) - 1; // 4 бита: 0b1111
|
// ulong maskL = (1UL << 4) - 1; // 4 бита: 0b1111
|
||||||
|
|
||||||
ulong maskS = 0b1111_1111;
|
// writefln("1UL: %u\n1UL << 8: %u\n(1UL << 8) - 1: %u", 1UL, 1UL << 8, maskS);
|
||||||
|
// writefln("1UL: %u\n1UL << 4: %u\n(1UL << 4) - 1: %u", 1UL, 1UL << 4, maskL);
|
||||||
|
// writeln();
|
||||||
|
|
||||||
|
ulong maskS = 0b11111111;
|
||||||
ulong maskL = 0b1111;
|
ulong maskL = 0b1111;
|
||||||
|
|
||||||
// Разбиение на чанки
|
// Разбиение на чанки
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
size_t chunkNumber = 1;
|
size_t chunkNumber = 1;
|
||||||
// Включаем отладку
|
|
||||||
bool debugEnabled = true;
|
|
||||||
writeln("Размеры и содержимое чанков:");
|
writeln("Размеры и содержимое чанков:");
|
||||||
while (offset < totalLength)
|
while (offset < totalLength)
|
||||||
{
|
{
|
||||||
size_t remaining = totalLength - offset;
|
size_t remaining = totalLength - offset;
|
||||||
// Включаем отладку только для первых двух чанков
|
size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize, normalSize, maskS, maskL);
|
||||||
debugEnabled = chunkNumber <= 2;
|
|
||||||
size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize,
|
|
||||||
normalSize, maskS, maskL, chunkNumber, debugEnabled);
|
|
||||||
|
|
||||||
// Вывод размера чанка и его содержимого
|
// Вывод размера чанка и его содержимого
|
||||||
writefln("Чанк %d: %d байт", chunkNumber, chunkSize);
|
writefln("Чанк %d: %d байт", chunkNumber, chunkSize);
|
||||||
string chunkContent = cast(string) data[offset .. offset + chunkSize];
|
string chunkContent = cast(string) data[offset .. offset + chunkSize];
|
||||||
// writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..."
|
// writefln("Содержимое: %s\n", chunkContent);
|
||||||
// : chunkContent);
|
writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..." : chunkContent);
|
||||||
writefln("Содержимое: %s\n", chunkContent);
|
|
||||||
|
|
||||||
offset += chunkSize;
|
offset += chunkSize;
|
||||||
chunkNumber++;
|
chunkNumber++;
|
||||||
}
|
}
|
||||||
|
|
72
source/text.d
Normal file
72
source/text.d
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
string text = "Цель науки о данных — улучшить процесс принятия решений, " ~
|
||||||
|
"основывая их на более глубоком понимании ситуации с помощью " ~
|
||||||
|
"анализа больших наборов данных. Как область деятельности " ~
|
||||||
|
"наука о данных включает в себя ряд принципов, методов " ~
|
||||||
|
"постановки задач, алгоритмов и процессов для выявления " ~
|
||||||
|
"скрытых полезных закономерностей в больших наборах данных. " ~
|
||||||
|
"Она тесно связана с глубинным анализом данных и машинным " ~
|
||||||
|
"обучением, но имеет более широкий охват. Сегодня наука о " ~
|
||||||
|
"данных управляет принятием решений практически во всех " ~
|
||||||
|
"сферах современного общества. В повседневной жизни вы " ~
|
||||||
|
"ощущаете на себе воздействие науки о данных, когда видите " ~
|
||||||
|
"отобранные специально для вас рекламные объявления, " ~
|
||||||
|
"рекомендованные фильмы и книги, ссылки на предполагаемых " ~
|
||||||
|
"друзей, отфильтрованные письма в папке со спамом, " ~
|
||||||
|
"персональные предложения от мобильных операторов и " ~
|
||||||
|
"страховых компаний. Она влияет на порядок переключения и " ~
|
||||||
|
"длительность сигналов светофоров в вашем районе, на то, как " ~
|
||||||
|
"были созданы новые лекарства, продающиеся в аптеке, и то, как " ~
|
||||||
|
"полиция вычисляет, где может потребоваться ее присутствие. " ~
|
||||||
|
"Рост использования науки о данных в обществе обусловлен " ~
|
||||||
|
"появлением больших данных и социальных сетей, увеличением " ~
|
||||||
|
"вычислительной мощности, уменьшением размеров носителей " ~
|
||||||
|
"компьютерной памяти и разработкой более эффективных " ~
|
||||||
|
"методов анализа и моделирования данных, таких как глубокое " ~
|
||||||
|
"обучение. Вместе эти факторы означают, что сейчас процесс " ~
|
||||||
|
"сбора, хранения и обработки данных стал как никогда ранее " ~
|
||||||
|
"доступен для организаций. В то же время эти технические " ~
|
||||||
|
"новшества и растущее применение науки о данных означают, что " ~
|
||||||
|
"этические проблемы, связанные с использованием данных и " ~
|
||||||
|
"личной конфиденциальностью, тоже вышли на первый план. Цель " ~
|
||||||
|
"этой книги — познакомить с наукой о данных на уровне ее " ~
|
||||||
|
"основных элементов и с той степенью погружения, которая " ~
|
||||||
|
"обеспечит принципиальное понимание вопроса. " ~
|
||||||
|
"Глава 1 очерчивает область науки о данных и дает краткую " ~
|
||||||
|
"историю ее становления и эволюции. В ней мы также " ~
|
||||||
|
"рассмотрим, почему наука о данных стала такой востребованной " ~
|
||||||
|
"сегодня, и перечислим факторы, стимулирующие ее внедрение. В " ~
|
||||||
|
"конце главы мы развенчаем несколько мифов, связанных с темой " ~
|
||||||
|
"книги. Глава 2 вводит фундаментальные понятия, относящиеся к " ~
|
||||||
|
"данным. В ней также описаны стандартные этапы проекта: " ~
|
||||||
|
"понимание бизнес-целей, начальное изучение данных, " ~
|
||||||
|
"подготовка данных, моделирование, оценка и внедрение. Глава 3 " ~
|
||||||
|
"посвящена инфраструктуре данных и проблемам, связанным с " ~
|
||||||
|
"большими данными и их интеграцией из нескольких источников. " ~
|
||||||
|
"Одна из таких типичных проблем заключается в том, что данные " ~
|
||||||
|
"в базах и хранилищах находятся на одних серверах, а " ~
|
||||||
|
"анализируются на других. Поэтому колоссальное время тратится " ~
|
||||||
|
"на перемещение больших наборов данных между этими " ~
|
||||||
|
"серверами. Глава 3 начинается с описания типичной " ~
|
||||||
|
"инфраструктуры науки о данных для организации и некоторых " ~
|
||||||
|
"свежих решений проблемы перемещения больших наборов " ~
|
||||||
|
"данных, а именно: метода машинного обучения в базе данных, " ~
|
||||||
|
"использования Hadoop для хранения и обработки данных, а также " ~
|
||||||
|
"разработки гибридных систем, в которых органично сочетаются " ~
|
||||||
|
"традиционное программное обеспечение баз данных и решения, " ~
|
||||||
|
"подобные Hadoop. Глава завершается описанием проблем, " ~
|
||||||
|
"связанных с интеграцией данных в единое представление для " ~
|
||||||
|
"последующего машинного обучения. Глава 4 знакомит читателя с " ~
|
||||||
|
"машинным обучением и объясняет некоторые из наиболее " ~
|
||||||
|
"популярных алгоритмов и моделей, включая нейронные сети, " ~
|
||||||
|
"глубокое обучение и деревья решений. В главе 5 основное " ~
|
||||||
|
"внимание уделяется использованию опыта в области машинного " ~
|
||||||
|
"обучения для решения реальных задач, приводятся примеры " ~
|
||||||
|
"анализа стандартных бизнес-проблем и того, как они могут быть " ~
|
||||||
|
"решены с помощью машинного обучения. В главе 6 " ~
|
||||||
|
"рассматриваются этические вопросы науки о данных, последние " ~
|
||||||
|
"разработки в области регулирования и некоторые из новых " ~
|
||||||
|
"вычислительных методов защиты конфиденциальности в " ~
|
||||||
|
"процессе обработки данных. Наконец, в главе 7 описаны сферы, " ~
|
||||||
|
"на которые наука о данных окажет наибольшее влияние в " ~
|
||||||
|
"ближайшем будущем, изложены принципы, позволяющие " ~
|
||||||
|
"определить, будет ли данный конкретный проект успешным.";
|
Loading…
Add table
Add a link
Reference in a new issue