From 808cbb28bdcd96831cf9e6d741fcacd1f083e918 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Mon, 8 Sep 2025 17:27:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D0=B4=D0=BE=D1=87=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/app.d | 207 +++++--------------------------------------------- source/text.d | 72 ++++++++++++++++++ 2 files changed, 90 insertions(+), 189 deletions(-) create mode 100644 source/text.d diff --git a/source/app.d b/source/app.d index da65d21..863bf5d 100644 --- a/source/app.d +++ b/source/app.d @@ -4,140 +4,43 @@ import std.string; // Статическая таблица Gear (256 случайных 64-битных чисел) 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 с отладочной информацией -ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize, - size_t normalSize, ulong maskS, ulong maskL, size_t chunkNumber, bool debugEnabled) +ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize, size_t normalSize, ulong maskS, ulong maskL) { if (n <= minSize) - { - if (debugEnabled) - { - writefln("%s: Ранний возврат: остаток=%d <= минимальный размер=%d, размер чанка=%d", - __FUNCTION__, n, minSize, n); - } return n; - } if (n > maxSize) - { - if (debugEnabled) - { - writefln("%s: Ограничение n до максимального размера: %d -> %d", - __FUNCTION__, n, maxSize); - } n = maxSize; - } if (n < normalSize) - { - if (debugEnabled) - { - writefln("%s: Корректировка нормального размера: %d -> %d", - __FUNCTION__, normalSize, n); - } normalSize = n; - } - - ulong fingerprint = 0; + ulong fp = 0; size_t i = 0; - - if (debugEnabled) - { - writefln("%s: Начало обработки чанка %d, остаток=%d, " ~ - "минимальный размер=%d, нормальный размер=%d, максимальный размер=%d", - __FUNCTION__, chunkNumber, n, minSize, normalSize, maxSize); - } - - // Инициализация fingerprint (отпечатка) для первых minSize байт (без проверки cut-point) + // Инициализация fp для первых minSize байт (без проверки cut-point) while (i < minSize) { - fingerprint = (fingerprint << 1) + gear[src[i]]; - if (debugEnabled) - { - writefln("%s: Фаза инициализации, индекс=%d, байт=%d, fingerprint=%d", - __FUNCTION__, i, src[i], fingerprint); - } + fp = (fp << 1) + gear[src[i]]; i++; } - // Цикл до normalSize (строгая маска) while (i < normalSize) { - printDetails(src, fingerprint, i, maskS); - fingerprint = (fingerprint << 1) + gear[src[i]]; - ulong masked = fingerprint & maskS; - if (debugEnabled) + fp = (fp << 1) + gear[src[i]]; + if ((fp & maskS) == 0) { - 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; } i++; } - // Цикл после (слабая маска) while (i < n) { - printDetails(src, fingerprint, i, maskL); - fingerprint = (fingerprint << 1) + gear[src[i]]; - ulong masked = fingerprint & maskL; - if (debugEnabled) + fp = (fp << 1) + gear[src[i]]; + if ((fp & maskL) == 0) { - 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; } i++; - } - if (debugEnabled) - { - writefln("%s: Точка разбиения не найдена, возвращается максимальный размер=%d", - __FUNCTION__, n); } return n; // Достигнут max } @@ -145,78 +48,7 @@ ulong fastcdc(const ubyte[] src, size_t n, size_t minSize, size_t maxSize, void main() { // Текст без переносов строк, \n заменены на пробел - string text = "Цель науки о данных — улучшить процесс принятия решений, " ~ - "основывая их на более глубоком понимании ситуации с помощью " ~ - "анализа больших наборов данных. Как область деятельности " ~ - "наука о данных включает в себя ряд принципов, методов " ~ - "постановки задач, алгоритмов и процессов для выявления " ~ - "скрытых полезных закономерностей в больших наборах данных. " ~ - "Она тесно связана с глубинным анализом данных и машинным " ~ - "обучением, но имеет более широкий охват. Сегодня наука о " ~ - "данных управляет принятием решений практически во всех " ~ - "сферах современного общества. В повседневной жизни вы " ~ - "ощущаете на себе воздействие науки о данных, когда видите " ~ - "отобранные специально для вас рекламные объявления, " ~ - "рекомендованные фильмы и книги, ссылки на предполагаемых " ~ - "друзей, отфильтрованные письма в папке со спамом, " ~ - "персональные предложения от мобильных операторов и " ~ - "страховых компаний. Она влияет на порядок переключения и " ~ - "длительность сигналов светофоров в вашем районе, на то, как " ~ - "были созданы новые лекарства, продающиеся в аптеке, и то, как " ~ - "полиция вычисляет, где может потребоваться ее присутствие. " ~ - "Рост использования науки о данных в обществе обусловлен " ~ - "появлением больших данных и социальных сетей, увеличением " ~ - "вычислительной мощности, уменьшением размеров носителей " ~ - "компьютерной памяти и разработкой более эффективных " ~ - "методов анализа и моделирования данных, таких как глубокое " ~ - "обучение. Вместе эти факторы означают, что сейчас процесс " ~ - "сбора, хранения и обработки данных стал как никогда ранее " ~ - "доступен для организаций. В то же время эти технические " ~ - "новшества и растущее применение науки о данных означают, что " ~ - "этические проблемы, связанные с использованием данных и " ~ - "личной конфиденциальностью, тоже вышли на первый план. Цель " ~ - "этой книги — познакомить с наукой о данных на уровне ее " ~ - "основных элементов и с той степенью погружения, которая " ~ - "обеспечит принципиальное понимание вопроса. " ~ - "Глава 1 очерчивает область науки о данных и дает краткую " ~ - "историю ее становления и эволюции. В ней мы также " ~ - "рассмотрим, почему наука о данных стала такой востребованной " ~ - "сегодня, и перечислим факторы, стимулирующие ее внедрение. В " ~ - "конце главы мы развенчаем несколько мифов, связанных с темой " ~ - "книги. Глава 2 вводит фундаментальные понятия, относящиеся к " ~ - "данным. В ней также описаны стандартные этапы проекта: " ~ - "понимание бизнес-целей, начальное изучение данных, " ~ - "подготовка данных, моделирование, оценка и внедрение. Глава 3 " ~ - "посвящена инфраструктуре данных и проблемам, связанным с " ~ - "большими данными и их интеграцией из нескольких источников. " ~ - "Одна из таких типичных проблем заключается в том, что данные " ~ - "в базах и хранилищах находятся на одних серверах, а " ~ - "анализируются на других. Поэтому колоссальное время тратится " ~ - "на перемещение больших наборов данных между этими " ~ - "серверами. Глава 3 начинается с описания типичной " ~ - "инфраструктуры науки о данных для организации и некоторых " ~ - "свежих решений проблемы перемещения больших наборов " ~ - "данных, а именно: метода машинного обучения в базе данных, " ~ - "использования Hadoop для хранения и обработки данных, а также " ~ - "разработки гибридных систем, в которых органично сочетаются " ~ - "традиционное программное обеспечение баз данных и решения, " ~ - "подобные Hadoop. Глава завершается описанием проблем, " ~ - "связанных с интеграцией данных в единое представление для " ~ - "последующего машинного обучения. Глава 4 знакомит читателя с " ~ - "машинным обучением и объясняет некоторые из наиболее " ~ - "популярных алгоритмов и моделей, включая нейронные сети, " ~ - "глубокое обучение и деревья решений. В главе 5 основное " ~ - "внимание уделяется использованию опыта в области машинного " ~ - "обучения для решения реальных задач, приводятся примеры " ~ - "анализа стандартных бизнес-проблем и того, как они могут быть " ~ - "решены с помощью машинного обучения. В главе 6 " ~ - "рассматриваются этические вопросы науки о данных, последние " ~ - "разработки в области регулирования и некоторые из новых " ~ - "вычислительных методов защиты конфиденциальности в " ~ - "процессе обработки данных. Наконец, в главе 7 описаны сферы, " ~ - "на которые наука о данных окажет наибольшее влияние в " ~ - "ближайшем будущем, изложены принципы, позволяющие " ~ - "определить, будет ли данный конкретный проект успешным."; + mixin(import("text.d")); // Конвертация в ubyte[] (UTF-8) ubyte[] data = cast(ubyte[]) text; @@ -232,30 +64,27 @@ void main() // ulong maskS = (1UL << 8) - 1; // 8 бит: 0b11111111 // 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; // Разбиение на чанки size_t offset = 0; size_t chunkNumber = 1; - // Включаем отладку - bool debugEnabled = true; + writeln("Размеры и содержимое чанков:"); while (offset < totalLength) { size_t remaining = totalLength - offset; - // Включаем отладку только для первых двух чанков - debugEnabled = chunkNumber <= 2; - size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize, - normalSize, maskS, maskL, chunkNumber, debugEnabled); - + size_t chunkSize = fastcdc(data[offset .. $], remaining, minSize, maxSize, normalSize, maskS, maskL); // Вывод размера чанка и его содержимого writefln("Чанк %d: %d байт", chunkNumber, chunkSize); string chunkContent = cast(string) data[offset .. offset + chunkSize]; - // writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..." - // : chunkContent); - writefln("Содержимое: %s\n", chunkContent); - + // writefln("Содержимое: %s\n", chunkContent); + writefln("Содержимое: %s\n", chunkContent.length > 50 ? chunkContent[0 .. 50] ~ "..." : chunkContent); offset += chunkSize; chunkNumber++; } diff --git a/source/text.d b/source/text.d new file mode 100644 index 0000000..fb4d600 --- /dev/null +++ b/source/text.d @@ -0,0 +1,72 @@ +string text = "Цель науки о данных — улучшить процесс принятия решений, " ~ + "основывая их на более глубоком понимании ситуации с помощью " ~ + "анализа больших наборов данных. Как область деятельности " ~ + "наука о данных включает в себя ряд принципов, методов " ~ + "постановки задач, алгоритмов и процессов для выявления " ~ + "скрытых полезных закономерностей в больших наборах данных. " ~ + "Она тесно связана с глубинным анализом данных и машинным " ~ + "обучением, но имеет более широкий охват. Сегодня наука о " ~ + "данных управляет принятием решений практически во всех " ~ + "сферах современного общества. В повседневной жизни вы " ~ + "ощущаете на себе воздействие науки о данных, когда видите " ~ + "отобранные специально для вас рекламные объявления, " ~ + "рекомендованные фильмы и книги, ссылки на предполагаемых " ~ + "друзей, отфильтрованные письма в папке со спамом, " ~ + "персональные предложения от мобильных операторов и " ~ + "страховых компаний. Она влияет на порядок переключения и " ~ + "длительность сигналов светофоров в вашем районе, на то, как " ~ + "были созданы новые лекарства, продающиеся в аптеке, и то, как " ~ + "полиция вычисляет, где может потребоваться ее присутствие. " ~ + "Рост использования науки о данных в обществе обусловлен " ~ + "появлением больших данных и социальных сетей, увеличением " ~ + "вычислительной мощности, уменьшением размеров носителей " ~ + "компьютерной памяти и разработкой более эффективных " ~ + "методов анализа и моделирования данных, таких как глубокое " ~ + "обучение. Вместе эти факторы означают, что сейчас процесс " ~ + "сбора, хранения и обработки данных стал как никогда ранее " ~ + "доступен для организаций. В то же время эти технические " ~ + "новшества и растущее применение науки о данных означают, что " ~ + "этические проблемы, связанные с использованием данных и " ~ + "личной конфиденциальностью, тоже вышли на первый план. Цель " ~ + "этой книги — познакомить с наукой о данных на уровне ее " ~ + "основных элементов и с той степенью погружения, которая " ~ + "обеспечит принципиальное понимание вопроса. " ~ + "Глава 1 очерчивает область науки о данных и дает краткую " ~ + "историю ее становления и эволюции. В ней мы также " ~ + "рассмотрим, почему наука о данных стала такой востребованной " ~ + "сегодня, и перечислим факторы, стимулирующие ее внедрение. В " ~ + "конце главы мы развенчаем несколько мифов, связанных с темой " ~ + "книги. Глава 2 вводит фундаментальные понятия, относящиеся к " ~ + "данным. В ней также описаны стандартные этапы проекта: " ~ + "понимание бизнес-целей, начальное изучение данных, " ~ + "подготовка данных, моделирование, оценка и внедрение. Глава 3 " ~ + "посвящена инфраструктуре данных и проблемам, связанным с " ~ + "большими данными и их интеграцией из нескольких источников. " ~ + "Одна из таких типичных проблем заключается в том, что данные " ~ + "в базах и хранилищах находятся на одних серверах, а " ~ + "анализируются на других. Поэтому колоссальное время тратится " ~ + "на перемещение больших наборов данных между этими " ~ + "серверами. Глава 3 начинается с описания типичной " ~ + "инфраструктуры науки о данных для организации и некоторых " ~ + "свежих решений проблемы перемещения больших наборов " ~ + "данных, а именно: метода машинного обучения в базе данных, " ~ + "использования Hadoop для хранения и обработки данных, а также " ~ + "разработки гибридных систем, в которых органично сочетаются " ~ + "традиционное программное обеспечение баз данных и решения, " ~ + "подобные Hadoop. Глава завершается описанием проблем, " ~ + "связанных с интеграцией данных в единое представление для " ~ + "последующего машинного обучения. Глава 4 знакомит читателя с " ~ + "машинным обучением и объясняет некоторые из наиболее " ~ + "популярных алгоритмов и моделей, включая нейронные сети, " ~ + "глубокое обучение и деревья решений. В главе 5 основное " ~ + "внимание уделяется использованию опыта в области машинного " ~ + "обучения для решения реальных задач, приводятся примеры " ~ + "анализа стандартных бизнес-проблем и того, как они могут быть " ~ + "решены с помощью машинного обучения. В главе 6 " ~ + "рассматриваются этические вопросы науки о данных, последние " ~ + "разработки в области регулирования и некоторые из новых " ~ + "вычислительных методов защиты конфиденциальности в " ~ + "процессе обработки данных. Наконец, в главе 7 описаны сферы, " ~ + "на которые наука о данных окажет наибольшее влияние в " ~ + "ближайшем будущем, изложены принципы, позволяющие " ~ + "определить, будет ли данный конкретный проект успешным.";