CN115982207B - 银行交易资金回流多线程并行检测方法及系统 - Google Patents
银行交易资金回流多线程并行检测方法及系统 Download PDFInfo
- Publication number
- CN115982207B CN115982207B CN202310264829.1A CN202310264829A CN115982207B CN 115982207 B CN115982207 B CN 115982207B CN 202310264829 A CN202310264829 A CN 202310264829A CN 115982207 B CN115982207 B CN 115982207B
- Authority
- CN
- China
- Prior art keywords
- vertex
- loop
- thread
- directed graph
- data structure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
本发明涉及一种银行交易资金回流多线程并行检测方法及系统,属于大数据分析处理领域。方法包括:根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;基于有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;调用多个线程同时从虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;所有线程运行结束之后,利用线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。本发明方法通过将计算任务分解到多个线程上并行执行,充分利用了底层多核处理器的高并发性缩短了算法执行时间,提高了存在回流预警的交易环路的挖掘效率。
Description
技术领域
本发明涉及大数据分析处理技术领域,特别是涉及一种银行交易资金回流多线程并行检测方法及系统。
背景技术
在金融大数据分析领域,银行交易记录中的资金回流意味着可能存在金融欺诈行为,是银行金融风控和金融监管的一项重要内容。由于银行交易记录数据量庞大,可能包含数十亿个账户和数千亿甚至万亿条交易流水,而账户之间的交易信息可能错综复杂,因此如何从海量复杂数据中快速检测出存在回流预警的交易环路是需要解决的重要问题。
图数据结构使用顶点和边表示一组对象及对象之间的关系,可以使用有向图直观、自然地对银行交易数据进行建模,然后利用有向图中的环路挖掘进行交易资金回流的检测。传统的有向环路求解方法大多是串行的思想,利用图上的深度优先搜索遍历来检测环路。串行方法需要高额的数据访问开销和计算开销以遍历整个有向图寻找图中存在的所有有向环路,对银行交易记录这种海量数据使用串行方法进行环路求解存在许多不足。一方面,串行方法无法充分利用多核多处理器的高并发性,造成底层硬件资源的大幅度浪费;另一方面串行环路挖掘效率低,导致资金回流链路检测的反馈时间延迟,无法满足实时金融风控和监管的需求。
发明内容
本发明的目的是提供一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高存在回流预警的交易环路的挖掘效率。
为实现上述目的,本发明提供了如下方案:
一种银行交易资金回流多线程并行检测方法,包括:
根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;
基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;
基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;
所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。
可选地,所述根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点,具体包括:
获取银行交易记录;所述银行交易记录中包括多条交易流水;
将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;
为所述有向图中的每个顶点构建对应的邻接表来存放该顶点/>指向的所有邻接点;
在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点。
可选地,所述基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构,具体包括:
针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合;
针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列;
初始化所述控制栈和顶点栈/>均为空。
可选地,所述所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路,具体包括:
所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;
遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;
根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。
一种银行交易资金回流多线程并行检测系统,包括:
有向图及邻接表构建模块,用于根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;
数据结构构建模块,用于基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;
多线程并行检测模块,用于基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;
资金回流交易信息输出模块,用于在所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。
可选地,所述有向图及邻接表构建模块具体包括:
交易记录获取单元,用于获取银行交易记录;所述银行交易记录中包括多条交易流水;
有向图构建单元,用于将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;
邻接表构建单元,用于为所述有向图中的每个顶点构建对应的邻接表来存放该顶点/>指向的所有邻接点;
虚拟顶点增加单元,用于在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点。
可选地,所述数据结构构建模块具体包括:
线程间共享内存数据结构构建单元,用于针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合;
线程内局部数据结构构建单元,用于针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列;
线程内局部数据结构初始化单元,用于初始化所述控制栈和顶点栈/>均为空。
可选地,所述资金回流交易信息输出模块具体包括:
资金回流环路个数统计单元,用于在所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
根节点环路链表创建单元,用于对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;
遍历查找单元,用于遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;
资金回流环路输出单元,用于根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明提供了一种银行交易资金回流多线程并行检测方法及系统,所述方法包括:根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。本发明方法通过将计算任务分解到多个线程上并行执行,充分利用了底层多核处理器的高并发性缩短了算法执行时间,提高了存在回流预警的交易环路的挖掘效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一种银行交易资金回流多线程并行检测方法的流程图;
图2为本发明一种银行交易资金回流多线程并行检测方法的原理示意图;
图3为本发明实施例提供的从银行交易记录中构建的有向图及其邻接表存储结构的示意图;
图4为本发明实施例提供的调用多个线程同时从虚拟顶点出发执行环路求解任务中每个线程的过程示意图;
图5为本发明实施例提供的环路集合对应的并查集进行合并之前和合并之后的变化示意图;
图6为本发明实施例提供的所有线程求解结束后利用并查集输出资金回流环路信息的过程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的目的是提供一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高存在回流预警的交易环路的挖掘效率。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
图1为本发明一种银行交易资金回流多线程并行检测方法的流程图,图2为本发明一种银行交易资金回流多线程并行检测方法的原理示意图。参见图1和图2,本发明一种银行交易资金回流多线程并行检测方法包括:
步骤1:根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点。
图3为本发明实施例从银行交易记录中构建的有向图及其邻接表存储结构的示意图。参见图3,所述步骤1根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点,具体包括:
步骤1.1:获取银行交易记录;所述银行交易记录中包括多条交易流水。
步骤1.2:将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图,如图3中左图所示,图中a、b、c、d、e、f、g均为有向图中的顶点。
步骤1.3:为所述有向图中的每个顶点构建对应的邻接表来存放该顶点/>指向的所有邻接点。
具体地,使用哈希表存储所有的顶点信息,对每个顶点构建使用哈希表存储的邻接表结构。对每条有向边,将顶点/>插入顶点/>的邻接表中,若/>重复出现则只保留一个。例如图3所示,将顶点b插入顶点a的邻接表中。
步骤1.4:在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点。
具体地,在原始有向图中增加一个虚拟顶点,对原始有向图中每个顶点/>增加一条有向边/>。存储虚拟顶点/>到顶点哈希表中,并将原始有向图中每个顶点/>插入/>的邻接表中,得到的邻接表存储结构如图3中右图所示。
步骤2:基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构。
该步骤2目的在于定义并初始化数据结构,包括线程间共享内存数据结构(以下也简称共享内存数据结构)和线程内局部数据结构(以下也简称局部数据结构)。
所述步骤2基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构,具体包括:
步骤2.1:针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合。
对每一个顶点,定义共享内存数据结构记录该顶点的状态、该顶点当前所在的线程集合以及该顶点当前所处的环路集合。其中,每个数据结构具体解释如下。
2.1.1每个顶点在环路求解过程中共区分三个状态,使用状态集合status(v)进行记录:
顶点未访问过,标记为unvisited;
顶点已完全识别出在某个环路中,标记为dead;
顶点已被访问过并且其所有的邻接点是dead状态或者与该顶点在同一个环路集合中,标记为done。
初始化时每个顶点状态为unvisited。
2.1.2每个顶点可能同时被一个或多个线程处理,使用线程集合thread(v)记录当前处理该顶点的所有线程,初始化为空;当某一线程访问顶点时,将该线程身份信息加入线程集合thread(v)中。
2.1.3在多个线程进行深度优先搜索遍历过程当中,当前找到的环路可能不是最终结果,因此使用环路集合circle(v)记录所有参与任务求解的线程当前所找到的所在环路集合中的顶点,当有更大的环路找到时需要进行环路集合的合并,因此使用并查集数据结构记录顶点当前所在的环路。其中,环路集合采用并查集数据结构实现,解释如下:
2.1.3.1设顶点对应的并查集结构为/>,/>和分别代表顶点/>在并查集里的父节点以及顶点/>所在并查集的深度;
2.1.3.2初始化时每个顶点对应一个独立的环路集合,即,相应地,并查集结构初始化为/>和/>。
步骤2.2:针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列。
步骤2.3:初始化所述控制栈和顶点栈/>均为空。
步骤3:基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法。
图4为本发明实施例调用多个线程同时从虚拟顶点出发执行环路求解任务中每个线程的过程示意图。参见图4,每个线程使用一个局部控制栈以非递归方式进行深度优先搜索遍历,同时使用一个顶点栈记录向前遍历过程中访问到的顶点序列。
所述步骤3基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法,具体包括:
步骤3.1:首先,将虚拟顶点分别压入线程p的控制栈/>和顶点栈/>,相应地,将线程p加入虚拟顶点/>的线程集合,即/>,其中“/>”是编程语言里的赋值语句的符号,/>表示线程p的集合。
步骤3.2:取线程p控制栈的栈顶元素,对于/>当前所处环路集合circle(v)中的每个顶点/>,访问共享内存数据变量/>,若/>=done则略过不处理;若/>的状态不是done,即/> done,则从/>的邻接表中按照随机顺序依次取出每个邻接点w,根据w当前的状态做如下相应操作。
3.2.1:若w状态是dead,说明w所在的有向环已经完全识别出来,其所在环路中的顶点包括w在内已全部存放在中,因此不对w做任何处理。
3.2.2:若w状态是unvisited或者w与当前线程p的顶点栈中每一个顶点都不在相同的环路集合中,即对于每一个顶点栈/>中的顶点/>(即对于任意/>)都有,则将w分别压入控制栈/>和顶点栈/>,同时线程p加入w的线程集合,即/>,继续向前进行深度优先搜索遍历。
其中判断通过无锁机制的并行并查集数据结构实现,具体方式如下。
3.2.2.1:设顶点w和顶点的并查集数据结构分别为/>和UF[/>]。
3.2.2.2:沿着的父节点向上一直找到顶点w所在并查集的根节点,也即找到父节点指向自己的结点,令顶点w所在并查集的根节点记作/>,同理,找到顶点/>所在并查集的根节点,记作/>。
3.2.2.3:若,则集合/>,判断程序结束;否则转下一步处理线程间的并发冲突。
3.2.2.4:若此时进一步确定是其所在并查集的根节点,即,则集合/>,判断程序结束;否则说明在上述判断过程中进行对比的两个并查集有被其他线程修改,则重新启动判断程序。
3.2.3:若w状态不是unvisited并且w与当前顶点栈中的某个顶点在相同的环路集合中,即存在顶点栈/>中的某个顶点/>(/>)有/>,说明存在一条v到w、w到/>、/>到v的回路,则进行环路集合的合并,将v到w之间顶点及每个顶点所在环路集合合并为一个环路集合,具体实现方式如下。
3.2.3.1:依次从顶点栈中弹出元素r,即/>。
3.2.3.2:取出顶点栈中新的栈顶元素r’,即r’/>。
3.2.3.3:合并r的环路集合与r’的环路集合,合并之后r与r’的环路集合相等,即并且/>,进而有,表示顶点r和顶点r’被识别出在同一环路中。
3.2.3.4:重复上述操作一直到顶点v和顶点w处于同一个环路集合中,即 ,表示顶点v和顶点w以及线程p顶点栈中v到w之间所有的顶点都被识别出在同一环路中。
以上过程可概括为依次从顶点栈中弹出元素r,将r的环路集合与顶点栈/>中新的栈顶元素r’的环路集合进行合并,重复该操作一直到顶点v和顶点w处于同一个环路集合中。其中,环路集合的合并通过使用带有权重和路径压缩优化的并发并查集数据结构实现,具体方式如下。
3.2.3.5:设待合并的两个集合分别为顶点x和顶点y所在的环路集合和,并且设x和y的并查集数据结构分别为/>和/>。
3.2.3.6:沿着的父节点向上一直找到顶点x所在并查集的根结点,也即找到父节点指向自己的结点,记作/>,同理,找到顶点y所在并查集的根结点/>。
3.2.3.7:在查找的同时进行并查集路径压缩优化,即修改查找路径上的每个节点的父节点直接指向根结点,修改操作使用无锁机制。
3.2.3.8:根据和/>对应并查集的深度进行合并,选取深度大的根节点作为合并之后并查集的根节点,环路集合对应的并查集进行合并之前和合并之后的变化如图5所示,图5中parent表示父节点,depth表示深度。
步骤3.3:当的邻接表中每个邻接点都处理完之后,修改顶点/>的状态为done,表示其所有的邻接点状态或者是dead或者是已经被识别出与顶点/>在同一个环路集合中。
步骤3.4:从控制栈弹出栈顶元素/>,表示从顶点/>出发的深度优先搜索遍历已经完成,此时对/>作如下处理。
步骤3.4.1:修改此时所处环路集合circle(v)中的每个顶点的状态为dead,说明这些顶点所在的环路已经识别出;
步骤3.4.2:如果与此时顶点栈/>的栈顶元素相同,即/>,则从/>中将栈顶元素弹出,否则,将/>中的栈顶元素作为其所在环路顶点集合的代表元素保留在顶点栈/>中。
步骤3.5:若线程p的控制栈不为空,则重复执行步骤3.2至步骤3.4,直到控制栈为空。
当控制栈为空时,表示该线程p从虚拟顶点/>出发依照深度优先搜索遍历的次序求解环路的过程结束。
步骤4:所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。
图6为本发明实施例所有线程求解结束后利用并查集输出资金回流环路信息的过程示意图。参见图6,所有线程运行结束之后,使用一个主线程利用共享内存数据结构中的环路集合信息输出所有检测到的资金回流环路。
所述步骤4所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路,具体包括:
步骤4.1:所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
扫描存储环路集合的并查集统计环路的总个数,环路总数等于并查集中根节点的总数,因此在扫描过程中统计根节点的个数即可,节点v为根节点的判断条件为:;
步骤4.2:对每个并查集根节点v创建一个环路链表存放该根节点v所在环路的顶点信息,初始化为空;
步骤4.3:遍历有向图中的每个顶点w,利用并查集上的查找算法找到该顶点w的根结点,将该顶点w添加至对应根节点/>的环路链表/>中;
步骤4.4:根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路;
具体地,根据每个根节点v对应的环路链表输出存在资金回流的银行交易流水信息(即资金回流环路)。资金回流环路也可以由用户指定环路长度,有选择性地输出某一交易长度范围内(如长度大于2)的资金回流环路作为资金回流交易信息。
本发明方法首先从银行交易记录中构建有向图的邻接表存储结构,并增加一个虚拟顶点令其指向原始图中每一个顶点;创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;然后调用多个线程同时从虚拟顶点出发进行深度优先搜索遍历,执行环路求解算法;所有线程运行结束之后,利用共享内存数据结构中的环路集合输出所有检测到的资金回流交易环路信息。与已有技术相比,本发明方法的有益效果体现在:
(1)采用多线程并行计算的方式检测资金回流环路,能够充分利用底层硬件多核多处理器的高并发性,有效提升计算性能,降低反馈延迟,可以处理包含数十亿个顶点和数千亿至万亿条边的大规模银行交易数据,能够满足实际应用的需求;
(2)不需要对图进行划分,每个线程都可以访问图中任意顶点,通过共享内存数据结构实现线程间的通信;当找到部分环路时及时进行环路合并,同时修改相应顶点对应的状态通知其他线程。该策略避免对图进行预处理,节省了预处理所需的空间和时间开销;
(3)使用邻接表存储结构构建图时增加一个虚拟顶点,并令其指向原始有向图中的每个顶点,在进行多线程调用时,采用每个线程都从虚拟顶点出发并随机选择下一个邻接点的方式,可以均匀分散图数据到不同的线程中处理,提高了线程间的并行计算能力;
(4)采用加权以及路径压缩优化的并查集数据结构表示环路集合,可以快速实现环路集合的查找、合并、判断等操作,同时在多线程通信时采用无锁机制实现并查集上的读写操作,进一步提高了并发性从而提高了计算效率。
基于本发明提供的方法,本发明还提供一种银行交易资金回流多线程并行检测系统,所述系统包括:
有向图及邻接表构建模块,用于根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;
数据结构构建模块,用于基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;
多线程并行检测模块,用于基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;
资金回流交易信息输出模块,用于在所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路。
其中,所述有向图及邻接表构建模块具体包括:
交易记录获取单元,用于获取银行交易记录;所述银行交易记录中包括多条交易流水;
有向图构建单元,用于将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;
邻接表构建单元,用于为所述有向图中的每个顶点构建对应的邻接表来存放该顶点/>指向的所有邻接点;
虚拟顶点增加单元,用于在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点。
所述数据结构构建模块具体包括:
线程间共享内存数据结构构建单元,用于针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合;
线程内局部数据结构构建单元,用于针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列;
线程内局部数据结构初始化单元,用于初始化所述控制栈和顶点栈/>均为空。
所述资金回流交易信息输出模块具体包括:
资金回流环路个数统计单元,用于在所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
根节点环路链表创建单元,用于对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;
遍历查找单元,用于遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;
资金回流环路输出单元,用于根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。
本发明提供的一种银行交易资金回流多线程并行检测方法及系统,通过将计算任务分解到多个线程上并行执行,充分利用底层多核处理器的高并发性缩短算法执行时间,提高任务求解效率,从而获得更好的性能,为金融大数据分析在风险控制和金融监管中的应用提供有效支持。
对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (2)
1.一种银行交易资金回流多线程并行检测方法,其特征在于,包括:
根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;
所述根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点,具体包括:
获取银行交易记录;所述银行交易记录中包括多条交易流水;
将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;
为所述有向图中的每个顶点构建对应的邻接表来存放该顶点/>指向的所有邻接点;
在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点;
基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;
所述基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构,具体包括:
针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合;
每个顶点在环路求解过程中共区分三个状态,使用状态集合status(v)进行记录:顶点未访问过,标记为unvisited;顶点/>已完全识别出在某个环路中,标记为dead;顶点/>已被访问过并且其所有的邻接点是dead状态或者与该顶点在同一个环路集合中,标记为done;
当某一线程访问顶点时,将该线程身份信息加入线程集合thread(v)中;
环路集合circle(v)采用并查集数据结构实现,具体包括:设顶点对应的并查集结构为/>,/>和/>分别代表顶点/>在并查集里的父节点以及顶点所在并查集的深度;初始化时每个顶点对应一个独立的环路集合,即/>,相应地,并查集结构初始化为/>和/>;
针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列;
初始化所述控制栈和顶点栈/>均为空;
基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;
所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路;
所述所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路,具体包括:
所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;
遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;
根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。
2.一种银行交易资金回流多线程并行检测系统,其特征在于,包括:
有向图及邻接表构建模块,用于根据银行交易记录构建有向图及其邻接表存储结构,并增加一个虚拟顶点来指向有向图中每一个顶点;
所述有向图及邻接表构建模块具体包括:
交易记录获取单元,用于获取银行交易记录;所述银行交易记录中包括多条交易流水;
有向图构建单元,用于将每一条交易流水对应一条有向边,资金转出账户作为起始顶点,资金转入账户作为终止顶点,构建出银行交易记录的有向图;
邻接表构建单元,用于为所述有向图中的每个顶点构建对应的邻接表来存放该顶点指向的所有邻接点;
虚拟顶点增加单元,用于在所述有向图中增加一个虚拟顶点,所述虚拟顶点/>的邻接表中的邻接点为所述有向图中的所有顶点;
数据结构构建模块,用于基于所述有向图创建线程间共享内存数据结构,定义并初始化线程内局部数据结构;
所述数据结构构建模块具体包括:
线程间共享内存数据结构构建单元,用于针对所述有向图中的每个顶点创建三个线程间共享内存数据结构,分别为状态集合status(v)、线程集合thread(v)以及环路集合circle(v);其中状态集合status(v)用于记录该顶点/>的状态,线程集合thread(v)用于记录该顶点/>当前所在的线程集合,环路集合circle(v)用于记录该顶点/>当前所处的环路集合;
每个顶点在环路求解过程中共区分三个状态,使用状态集合status(v)进行记录:顶点未访问过,标记为unvisited;顶点/>已完全识别出在某个环路中,标记为dead;顶点/>已被访问过并且其所有的邻接点是dead状态或者与该顶点在同一个环路集合中,标记为done;
当某一线程访问顶点时,将该线程身份信息加入线程集合thread(v)中;
环路集合circle(v)采用并查集数据结构实现,具体包括:设顶点对应的并查集结构为/>,/>和/>分别代表顶点/>在并查集里的父节点以及顶点所在并查集的深度;初始化时每个顶点对应一个独立的环路集合,即/>,相应地,并查集结构初始化为/>和/>;
线程内局部数据结构构建单元,用于针对每一个线程p定义两个线程内局部数据结构,分别为控制栈和顶点栈/>;其中控制栈/>用于模拟该线程p进行深度优先搜索的递归操作,顶点栈/>用于存储深度优先搜索遍历过程中访问到的顶点序列;
线程内局部数据结构初始化单元,用于初始化所述控制栈和顶点栈/>均为空;
多线程并行检测模块,用于基于所述线程间共享内存数据结构和所述线程内局部数据结构,调用多个线程同时从所述虚拟顶点出发进行深度优先搜索遍历执行有向环路求解算法;
资金回流交易信息输出模块,用于在所有线程运行结束之后,利用所述线程间共享内存数据结构中的环路集合输出检测到的资金回流环路;
所述资金回流交易信息输出模块具体包括:
资金回流环路个数统计单元,用于在所有线程运行结束之后,扫描所述线程间共享内存数据结构中的环路集合的并查集,找出每个环路顶点集合的根节点,并根据根节点的个数统计总的资金回流环路个数;
根节点环路链表创建单元,用于对每个并查集根节点创建一个环路链表存放该根节点所在环路的顶点信息,初始化为空;
遍历查找单元,用于遍历有向图中的每个顶点,利用并查集上的查找算法找到该顶点的根结点,将该顶点添加至对应根节点的环路链表中;
资金回流环路输出单元,用于根据每个并查集根节点对应的环路链表输出预设交易长度范围内的资金回流环路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310264829.1A CN115982207B (zh) | 2023-03-20 | 2023-03-20 | 银行交易资金回流多线程并行检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310264829.1A CN115982207B (zh) | 2023-03-20 | 2023-03-20 | 银行交易资金回流多线程并行检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115982207A CN115982207A (zh) | 2023-04-18 |
CN115982207B true CN115982207B (zh) | 2023-07-28 |
Family
ID=85963484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310264829.1A Active CN115982207B (zh) | 2023-03-20 | 2023-03-20 | 银行交易资金回流多线程并行检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115982207B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115689761A (zh) * | 2023-01-03 | 2023-02-03 | 华侨大学 | 一种电子商务流向路径多线程并行检测方法及设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7167850B2 (en) * | 2002-10-10 | 2007-01-23 | Ab Initio Software Corporation | Startup and control of graph-based computation |
CN115689762B (zh) * | 2023-01-03 | 2023-04-07 | 华侨大学 | 银行交易资金流向路径检测方法、系统、设备及存储介质 |
-
2023
- 2023-03-20 CN CN202310264829.1A patent/CN115982207B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115689761A (zh) * | 2023-01-03 | 2023-02-03 | 华侨大学 | 一种电子商务流向路径多线程并行检测方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN115982207A (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111754349B (zh) | 对区块链中的交易进行分组的方法和装置 | |
CN106055311A (zh) | 基于流水线多线程的MapReduce任务并行化方法 | |
CN106709503A (zh) | 一种基于密度的大型空间数据聚类算法k‑dbscan | |
CN109522428A (zh) | 一种基于索引定位的图计算系统的外存访问方法 | |
CN105468439A (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行算法 | |
Yin et al. | DFGNet: Mapping dataflow graph onto CGRA by a deep learning approach | |
CN110264392B (zh) | 一种基于多gpu的强连通图检测方法 | |
CN105637482A (zh) | 基于gpu的数据流处理方法和装置 | |
CN106682514B (zh) | 基于子图挖掘的系统调用序列特征模式集生成方法 | |
CN115982207B (zh) | 银行交易资金回流多线程并行检测方法及系统 | |
CN114493856A (zh) | 用于处理数据的方法、系统、装置和介质 | |
CN115689762B (zh) | 银行交易资金流向路径检测方法、系统、设备及存储介质 | |
Jørgensen et al. | GPU-FAST-PROCLUS: a fast GPU-parallelized approach to projected clustering | |
CN105808210B (zh) | 共享资源的访问方法和装置 | |
CN113419861A (zh) | 一种面向gpu卡群的图遍历混合负载均衡方法 | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
CN112131444A (zh) | 一种低空间开销的大规模图中三角形计数方法及系统 | |
CN116841762A (zh) | 一种图神经网络训练中的定长式边点结合采样机制 | |
CN115689761B (zh) | 一种电子商务流向路径多线程并行检测方法及设备 | |
CN111625691A (zh) | 基于gpu的高性能图挖掘方法及系统 | |
CN114153494B (zh) | 一种基于热力图的热点代码优化方法及装置 | |
CN106547890A (zh) | 海量图像特征向量中的快速聚类预处理方法 | |
CN115861223A (zh) | 一种太阳能电池板缺陷检测方法及系统 | |
CN107908696A (zh) | 一种并行高效的基于网格与密度的多维空间数据聚类算法griden | |
Kruliš et al. | Optimizing sorting and top-k selection steps in permutation based indexing on GPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |