微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过多处理/并行编程提高暴力破解节点脚本的性能

如何解决通过多处理/并行编程提高暴力破解节点脚本的性能

我有5个单词清单。让我们称它们为list1list2list3list4list5
一个包含2048个单词的单词超集。
每个列表都包含单词超集中的全部或部分单词。

示例:
superset = ['one','two','three','a','b','c','d','e','f','h','i','j','k','g','z','blie']
list1 = ['one','three'];
list2 = ['a','c'];
list3 = ['d','f'];
list4 = ['g'];
list5 = ['h','k'];

最后的字符串res是通过串联每个列表中的一个单词而生成的。 例如:'one' + 'b' + 'f' + 'g' + 'k' = 'onebfgk

我有一个解码功能,该功能接受res输出一个数字。 我有兴趣找到能解码为给定数字的字符串:prize

当前,我正在生成res的所有可能组合,对其进行解码并将其与给定的prize进行匹配。
我当前的node.js脚本如下所示:

var prize = 1234;
var list1 = ['one','three'];
var list2 = ['a','c'];
var list3 = ['d','f'];
var list4 = ['g'];
var list5 = ['h','k'];
var word1 = '';
var word2 = '';
var word3 = '';
var word4 = '';
var word5 = '';

for (var n = 0; n < list1.length; n++) {
    word1 = list1[n];
    for (var m = 0; m < list2.length; m++) {
        word2 = list2[m];
        for (var o = 0; o < list3.length; o++) {
            word3 = list3[o];
            for (var p = 0; p < list4.length; p++) {
                word4 = list4[p];
                for (var q = 0; q < list5.length; q++) {
                    word5 = list5[q];
                    let res = word1 + word2 + word3 + word4 + word5;
                    if (decode(res) == prize){
                        console.log(res);
                        throw new Error("Found the match. The program will Now exit");
                    }
                }
            }
        }
    }
}

我有兴趣加快速度。 如何通过使脚本使用GPU或多处理/并行处理或任何其他方式来修改脚本以大幅度提高速度?

由于解码功能来自节点模块,因此我只能使用node.js。

解决方法

NodeJS实际上是用C ++编写的,因此,如果您要执行一些占用大量资源的工作,我建议您使用NodeJS addons feature。这是我发现优化某些需要在NodeJS中使用蛮力算法的代码的最佳方法。

在我的一些项目中,有一些我做得很好的关于这个主题的教程:

显然,这需要您了解一些C ++,但我认为没有更好的方法,因为您的目标是纯粹的优化和潜在的多线程操作。

您的C ++代码的第一种方法是:

at

如果您尊重N-API配置,则nodeJS文件应如下所示:

df.at[index_4='D0']['Something1']['2020-03-31'] = new_df['D0','2020-03-31']['val']

编辑:添加了示例+ C ++代码

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。