Что ж, термин энтропия появляется не только в термодинамике и теории информации, но и в реальном мире сжатия данных. В этом контексте энтропия, которую видит компрессор, равна числу битов, которые он производит. (Обратите внимание, что я сказал «энтропия, которую видит компрессор », потому что то, что считается энтропией, зависит от модели, которую компрессор использует для описания входных данных. Это причина того, почему разные компрессоры создают файлы разного размера: что такое энтропия для одна является эксплуатируемой структурой для другой.)
В принципе, это может быть красиво применено к сложности исходного кода: «Просто» напишите компрессор, который работает только с полностью стандартным совместимым исходным кодом и который сжимает его, фактически анализируя его, как это делает компилятор, создавая соответствующее синтаксическое дерево. Затем он может пройтись по этому синтаксическому дереву и решить на каждом узле, какие узлы были бы возможны в каждой точке, кодируя этот узел с этим знанием.
Так, например, если язык допускает либо существующий идентификатор, либо что-то, заключенное в скобки, либо продукт в определенной точке, компрессор будет подсчитывать возможные существующие идентификаторы, принимая во внимание информацию о типе (скажем, у вас есть 3 таких идентификатора). ), и добавьте 2 для двух возможных подвыражений, давая 5 возможностей. Таким образом, узел будет закодирован lb 5 = 2.32
битами. В случае двух возможных подвыражений потребуется больше битов для кодирования их содержимого.
Это действительно даст очень точную оценку сложности кода, как он есть. Однако эта мера все еще бесполезна! Это бесполезно по той же причине, по которой все измерения сложности кода бесполезны: они не позволяют установить связь между измеренной сложностью кода (какой бы она ни была) и сложностью проблемы, которую код решает. Вы всегда можете найти смехотворно сложные решения ваших программных проблем, чтобы произвести впечатление на вашего работодателя подсчетом LOC, но никакая мера сложности кода не скажет вам, что задача могла быть решена с небольшой долей усилий.