首页 > 解决方案 > 在 Squeak 中实现了 ZXing 的 Reed Solomon 纠错。很慢

问题描述

最终完成(主要是)我的 Reed Solomon 实施后,我感到多巴胺很高。我的解码工作正常,dataMatrix256 和 QRCode,包括损坏修复,在 t/2 错误内。它非常慢,使用起来很慢。为热点编写插件可能会加快速度,这些插件位于解码端:GFPoly evaluateAt (40.1%)、Decoder runEuclideanAlgorithm(38.5%)、Decoder findErrorLocations(12.6%) 和 Decoder find ErrorMagnitudes(2.3%)。

它是用我最喜欢的语言环境 Squeak 编写的。我已经使用了 20 多年。它是如此美丽!开发规则是#GetItWorking,#GetItWorkingRight #GetItWorkingFast。

如果您有兴趣查看代码,请访问http://squeak.org并获取 squeak。运行后,右键单击 World Menu 并选择 open...Monticello Browser。添加 HTTP 类型的新存储库并输入 Cryptography 存储库。

MCHttpRepository
    location: 'https://www.squeaksource.com/Cryptography'
    user: 'squeak'
    password: 'squeak'

打开一个工作区(世界菜单 - > 工作区)并运行此代码(粘贴到工作区,选择它并右键单击它。):

Installer ss
    project: 'Cryptography';
    install: 'ProCrypto-1-1-1';
    install: 'ProCryptoTests-1-1-1'.

现在您可以打开浏览器查看代码(类别:CryptographyRSFEC 和 CryptographyRSFECTests)或打开 TestRunner 来测试它(世界菜单 -> *)。


加速工作:我将 OrderedCollection 使用转换为 Array 使用以改进 #at:lookup 和 #at:put:set 调用。代码发布到 Cryptography。OrderedCollection 从分析中掉了下来。接下来是插件支持。

**Leaves**
16.5% {22153ms} RSFECGenericGF>>exp:
9.6% {12888ms} RSFECGenericGF>>maskValue:
9.1% {12205ms} RSFECGenericGF>>addOrSubtract:by:
7.1% {9561ms} RSFECGenericGF>>log:
6.5% {8694ms} RSFECGenericGF>>normalizeIndex:
4.7% {6299ms} RSFECGenericGF>>multiply:by:
2.6% {3512ms} RSFECGenericGFPoly>>evaluateAt:
1.3% {1780ms} RSFECGenericGFPoly>>addOrSubtractPoly:
1.3% {1682ms} RSFECGenericGFPoly>>multiplyByMonomialDegree:coefficient:

6.0% {8097ms} RSErasureGalois>>normalizeIndex:
1.7% {2336ms} RSErasureGalois>>maskValue:
1.6% {2140ms} RSErasureGalois>>tableMultiply:by:
1.5% {2040ms} RSErasureGalois>>add:by:
1.3% {1797ms} RSErasureGaloisTest(TestCase)>>assert:description:
1.2% {1669ms} RSErasureGalois>>galoisMultiply:by:

标签: zxingsqueak

解决方案


推荐阅读