perl的建树算法

perl 实现二叉树,二叉平衡树  #! /usr/bin/perl -wuse strict;use warnings;use Data::Dumper;my $head = undef;my $copy = /$head;foreach my $index( 1 .. 10 ){  &AVLTree_insert($copy, $index);}#&create_BSTree( $copy );#&create_tre 阅读详情

=pod
=item

  @result=();
  $ldap_root="NTA::ou1";
  push @result,"NTA::ou1::ou2::ou3";
  push @result,"NTA::ou1::ou2::ou4";

  push @result,"NTA::ou1::ou5::ou6";
  push @result,"NTA::ou1::ou5::ou6::o8";
  push @result,"NTA::ou1::ou5::ou6::o9";
 
  push @result,"NTA::ou1::ou5::ou7";
  push @result,"NTA::ou1::ou5::ou7::t";
  push @result,"NTA::ou1::ou5::ou7::t::y";
  push @result,"NTA::ou1::ou5::ou7::t::y::u";

  push @result,"NTA::ou1::ou6::ou8";
  push @result,"NTA::ou1::ou6::ou8::ji";
  push @result,"NTA::ou1::ou6::ou8::ji::jk";
  push @result,"NTA::ou1::ou6::ou9::j";
  push @result,"NTA::ou1::ou6::ou9::g";
=cut

########################################################
sub recusive_ldap{
 my %param=@_;
 my $left_list =$param{left_list}; # a array to put the left string in,use @$ to use it
 my $left =$param{left};
 my $right =$param{right},
 my $r_ldap_array=$param{r_ldap_array}; # use $$ to use this ref
 my $r_rid =$param{r_rid}; #use $$ to use it
 my $prefix =$param{prefix};


 FIND_DIFF:

 my @found=();

 my $current_group;

 my @merge_list=();
 
 my $diff_group_idx=-1;
 
 my $found_new_group=0;#begin a new match
 my $matched_new_group=0;
 my $begin_match=0;
 my ($left_idx,$right_idx);

 my $blank_item=0;


CURR: for(my $i=$left;$i<$right;$i++){

  if( @$left_list[$i] ne ''){
  @$left_list[$i]=~/::/;
  $current_group=$';

   if($current_group=~/::/){
    $current_group=$`;

   }

  }
  
  else{#last node  impossible to be a father nodwa
  $current_group=undef;
  $blank_item++;

  next CURR; # get next item
  }

  
  if (scalar @found== 0){ #first item

   if(defined $current_group){
    $begin_match=1;
    push @found ,$current_group  ;
    $diff_group_idx++;
    $left_idx=$i ;


    if(  (scalar @found ==1)  &&   ($i==$right-1)  ){
     my $merge={};
     $merge->{left}=$left+$blank_item;
     $merge->{right}=$i+1;
     push @merge_list,$merge;#storage the merge of the current node
    }

   }
   next CURR;

  }
  
  else { #matched a group and meet a new grp

   if($current_group ne $found[$diff_group_idx]){# a new node
    
    push @found ,$current_group;

    $left_idx=$i if $begin_match;

    $begin_match=0;
    $diff_group_idx++;
    $right_idx=$i;
    
    
    if(scalar @found==2){

     my $merge={};
     $merge->{left}=$left+$blank_item;
     $merge->{right}=$i;
     push @merge_list,$merge;#storage the merge of the current node


    }
    else{
     my $merge={};
     $merge->{left}=$left_idx;
     $merge->{right}=$i;
     push @merge_list,$merge;#storage the merge of the current node


      
    }

    if ($i==$right-1){ #last match
     my $merge={};
     if(scalar @found >1){
     $merge->{left}=$right_idx;
     }
     else {
      $merge->{left}=$left+$blank_item;
     
     }
     $merge->{right}=$i+1;
     push @merge_list,$merge;#storage the merge of the current node

    }

 

    $left_idx=$i;

   }

   else{ # continue to match the same father node
    if ($i==$right-1){ #last matcha
     my $merge={};
     
     if(scalar @found ==1){
      $merge->{left}=$left+$blank_item;
     }
     else{
      $merge->{left}=$right_idx;
     }
     
     $merge->{right}=$i+1;
     push @merge_list,$merge;#storage the merge of the current node
     
    }
   }

 

 

  }
 }# find all grps(different)
 

 return if scalar @found==0;
 my $rid=0;
 my $blank=[];
 my $current;
 my @g_array;

# print Dumper $left_list;
# print Dumper /@merge_list;

CREATE_NODE: 
 for(my $diff_grp=0;$diff_grp<scalar  @found; $diff_grp++){ #every different node

  my @ldgArray=();

  my $cur_grp=$found[$diff_grp];

   my $reg="::".$cur_grp;

   $reg=reg_encode($reg);

  for(my  $gidx=$merge_list[$diff_grp]->{left};
   $gidx<$merge_list[$diff_grp]->{right}; $gidx++){
   
   @$left_list[$gidx] =~s/^$reg//;# stript out this item
  }


  my $new_prefix= $prefix.$cur_grp."::";

  my $new_cap= $prefix.$cur_grp;

  if( $merge_list[$diff_grp]->{left}== $merge_list[$diff_grp]->{right}){
   my $item=_creat_node('gx_l'.$$r_rid,$cur_grp,0,1,'','edit_group.cgi?name='.$new_cap."&m_i=gxl_$$r_rid");
   $$r_rid++;

   push @$r_ldap_array,$item; # put the new node to the container

  }
  else{
  
   &recusive_ldap(
   left_list =>$left_list,
   left  =>$merge_list[$diff_grp]->{left} ,
   right  =>$merge_list[$diff_grp]->{right},
   r_ldap_array =>/@ldgArray,
   r_rid  =>$r_rid,
   prefix  =>$new_prefix
   );

   my $item=_creat_node('gx_l'.$$r_rid,$cur_grp,1,1,/@ldgArray,'edit_group.cgi?name='.$new_cap."&m_i=gxl_$$r_rid");
   
   $$r_rid++;

   push @$r_ldap_array,$item; # put the new node to the container
  }

 }  

};

 

############################################################################################
sub _creat_node{ #create a node of a menu tree
 my $node={};
 
# print "add";
#essential field

#$node->{'name'}=Translate shift;
 $node->{'name'}=shift;
 $node->{'info'}->{'text'}=shift;

#info field
 $node->{'info'}->{'isparent'}=shift;
 $node->{'info'}->{'linkout'}=shift;

#extra field

#if  is parent this field shouldn't be ''

# this parameter can be a single node or an array of node
 $node->{'children'}=shift;# default a ref to array


#if  the menu linkout this field shouldn't be blank
 $node->{'info'}->{'url'}=shift;


 if ($node->{'children'} ne ''){

  if((ref $node->{'children'}) ne "ARRAY"){ # it's a hash ref
  my @ar;
  push @ar, $node->{'children'};
  $node->{'children'}=/@ar;
  }
  else{
  }
 }
 else{ #if a blank is pass to a 'children' field delete this field
 delete $node->{'children'};
 }

 return $node;
}

1;

Evolview实战:5分钟教你美化NJ树并提取基因ID(附Perl脚本) 本文详细解析了使用Evolview平台美化NJ树的全流程,包括构建优化、高级可视化技巧及基因ID自动化提取方案。特别提供了Perl脚本增强版,支持bootstrap值过滤和多格式兼容,帮助研究人员快速生成发表级进化树图并高效提取关键基因信息。 阅读详情

相关推荐

【LTspice】005 伯德图绘制

目录 1 伯德图介绍 2 LTspice 截止频率验证 3 LTspice中如何添加光标 4 LTspice中如何将 幅频 和 相频曲线分开 1 伯德图介绍 Bode图由对数幅频特性和对数相频特性两张图组成。伯德图_百度百科 (1)对数幅频特性曲线 对数幅频特性是频率特性的对数值L(ω)=20lgA (ω)(dB)与频率ω的关系曲线;对数幅频特性的纵轴采用线性分度,为幅值的分贝数,即 L(ω)=20lgA(ω),A(ω)每增加10倍,L(ω)增加20dB;横坐标采用对数分度,即横轴上的ω取

m0_59642765的博客 1万+

数据结构-----二叉树的遍历

数据结构学完有好长时间了。渐渐忘记了很多,在此机会以做笔记的形式将其复习一般,同时熟悉敲点代码熟悉VIM。 一,基本概念 1,二叉树是节点的有限集合,该集合或者为空(而树不允许为空)或者是由一个根和两棵互不相交的、称为该根的左子树和右子树组成。 2,几种特殊的二叉树 满二叉树:高度为h的二叉树敲好有2h -1个结点时称为满二叉树 完全二叉树:一个二叉树中,只有最下面两层结点的度(一个结点

kkxgx的专栏 2526

从标准到实战:详解IEC 61000-4-2下的ESD电路防护设计

本文深入解析IEC 61000-4-2标准下的ESD电路防护设计,从静电防护的基础原理到实战应用。详细介绍了接触放电与空气放电的区别、防护器件选型要点(如TVS管和压敏电阻)以及PCB布局的黄金法则,帮助工程师有效提升电子产品的抗静电能力,确保设备在严苛环境下的稳定运行。

weixin_33704234的博客 512

perl语言与算法的关系

Perl语言提供了多种数据结构、字符串处理、正则表达式、排序算法、查找算法、图论算法和动态规划算法的实现方式,可以用于不同的算法实现。排序算法是算法中的重要部分,Perl语言提供了多种排序算法的实现方式,包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。查找算法也是算法中的重要部分,Perl语言提供了多种查找算法的实现方式,包括线性查找、二分查找、哈希表查找等。图论算法是算法中的重要部分,Perl语言提供了多种图论算法的实现方式,包括最短路径算法、最小生成树算法、拓扑排序算法等。

记录 IT 领域经验与见解的博客 514

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1131

Silvaco Atlas(五)——物理模型总结

物理模型总结

qsz1425AWD2121的博客 2151

Perl 闭包模拟类实现二叉树

在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。 功能同上一个版本的基本一样,是用闭包的好处: 1。 模拟类行为,开放类方法 2。 内部变量不可直接修改,只能通过方法调用获取或修改值 3。 消息类型多样,自己可以随便控制 特点: 1

USTBHacker的专栏 1754

微信小程序 - error_msg:net::ERR_CONNECTION_RESET“(“errno“:600001,“errMsg“:“uploadFile:fail errcode:-101)

"errno":600001,"errMsg":"uploadFile:fail errcode:-101 cronet_error_code:-101 error_msg:net::ERR_CONNECTION_RESET"微信小程序,微信小程序wx.uploadFile报错,uniapp微信小程序uni.uploadFile上传文件报错,微信小程序调用wx.uploadFile返回错误ERR_CONNECTION_RESET,如何解决这个问题,上传图片出现报错,小程序上传视频报错,上传文件出现报错,如何

🏆 前端领域优质创作者 5410

建树的几种常用方法

方法一: 此方法适用条件: 1.当我们遍历这颗树时只需要从父节点查找到子节点,不需要从子节点查找到父节点. 2.所建树为一颗二叉树 实现代码: class Tree{ int value;//代表该点的权值 int left_son;//左儿子编号 int right_son;//右儿子编号 int leftSide_value;//连接左儿子的边的权值 int rightSide_value;//连接右儿子边的权值 } 根据题目描述进行输入. 如依次输入 节点

jahup的博客 6901

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-并联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行并联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 374

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 659

生物信息学避坑指南:用GToTree做系统发育基因组学,这些参数和细节千万别忽略

遇到特别棘手的树形问题时,可以尝试"基因子集策略":从251个蓝藻基因中随机抽取50个生成100棵子树,通过共识树识别稳定节点。实践提示:当处理特殊类群如Chlamydiae时,其专用集含286个基因,但需验证这些基因在您样本中的存在率,避免因基因缺失过多导致分析失效。选择适合的HMM基因集(-H参数)是分析的第一步,也是影响结果可靠性的关键。特别注意:当使用-t参数自动添加分类信息时,务必先验证TaxonKit的本地数据库版本,过时的库会导致错误标签。中的完成度估计能揭示样本质量问题,而。

weixin_30394981的博客 413

用 ABAP CDS 把树建起来:Hierarchy 的建模、调试与消费全流程

CDS Hierarchy 将树形数据结构作为一等公民引入 ABAP 开发,通过定义父子关联、根节点条件和兄弟排序规则,让数据库原生支持层级查询。相比传统递归处理方式,它能避免性能瓶颈,提供$node系统字段描述节点结构信息,并支持与SAP UI框架无缝集成。这种方法简化了组织架构、成本中心等业务场景的层级数据处理,使开发人员能够专注于业务逻辑而非底层实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 205

集成学习擂台赛:AdaBoost与随机森林在金融风控中的性能对决

本文深入对比了AdaBoost与随机森林在金融风控中的性能表现,通过ROC曲线、特征重要性和抗噪声能力等多维度分析,揭示了两种集成学习算法的优劣势。针对金融场景的特殊需求,提供了算法调优和融合创新的实战策略,帮助从业者在精准打击与全面防御之间找到最佳平衡。

sam99的博客 526

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

零基础学c语言如何开始

如果是想通过计算机等级考试 就买一本全国计算机等级考试二级试题认真做就可以了 当然也要加强上机实践。 怎样才能学好C语言 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的indows, Unix, Li...

wenpeng231的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c语言中的mecpy的用法_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...

前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:  1.兼备高级语言...

weixin_36448199的博客 153

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c语言prime函数怎么用_一个资深C语言工程师:浅说C语言的重要性以及如何学好C语言...

前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:1.兼备高...

weixin_39736606的博客 1652

c语言是非结构化程序语言_一个资深C语言工程师说C语言的重要性!直言道:不学C学什么?...

前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:1.兼备高级语言与低...

weixin_39663378的博客 1038

CodeChef DGCD Dynamic GCD

CodeChef题面 Time limit 210 ms Code length Limit //内存限制也不说一下,真是的…… 50000 B OS Linux Language limit C, CPP14, JAVA, PYTH, PYTH 3.6, CS2, PAS fpc, PAS gpc, RUBY, PHP, GO, NODEJS, HASK, SCALA, D, PERL, ...

weixin_30852367的博客 217

php内核源码解析=正则表达式引擎——PCRE的底层

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>45-JavaScript-位置获取</title> <style> *{ margin: 0; padding: 0; } div{ widt

qq_37805832的博客 851

c语言中的mecpy的用法_一个资深C语言工程师:浅说C语言的重要性以及如何学好C语言...

前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:1.兼备高级语言与低...

weixin_31107269的博客 203

关于将进酒的c语言程序_一个资深C语言工程师:浅说C语言的重要性以及如何学好C语言...

前言C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有很大的局限性,因为它只能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的优点很多,主要的有如下四点:1.兼备高...

weixin_30951515的博客 181

c语言入门

如果是想通过计算机等级考试 就买一本全国计算机等级考试二级试题认真做就可以了 当然也要加强上机实践。 怎样才能学好C语言 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的indows, Unix, Li...

weixin_43564070的博客 155

Claude Mythos:通用AI如何重塑网络安全攻防范式

通用人工智能正从辅助工具演变为具备自主任务规划与系统级推理能力的攻防主体。其核心在于长链条因果推理、跨域知识融合与动态环境适应能力,而非单纯参数规模或领域微调。这类模型在漏洞挖掘、符号执行与纵深渗透中展现出远超传统专用模型的涌现性行为,推动安全实践从‘人工驱动’转向‘人机协同指挥’。技术价值体现在对齐控制、沙箱审计与算力密度的工程化重构,应用场景覆盖红队自动化、DevSecOps实时响应及AI原生安全开发。Claude Mythos正是这一代AI安全能力跃迁的典型代表,标志着AI已开始将整个网络空间建模为可

anjueci1221的博客 356

Perl 前缀树实现

前缀树,用来处理大量字符串的查找、排序,也称为字典树,可以代替hash table。 http://en.wikipedia.org/wiki/Trie 以下翻译自Wikipedia: The following are the main advantages of tries over binary search trees (BSTs): Looking up keys

USTBHacker的专栏 2773

Perl语言遍历树形结构的算法设计——利用cisco邻居发现协议遍历全网络的思路

先来点铺垫,网络工程师一枚,两年前没事就爱逛逛智联招聘,发现招聘上总是有一条“会脚本语言中perl/php/python”一种。忘记当时怎么想的了,选的perl。因为现如今是python的天下了,很多人鼓吹python说perl已死,两年期间也犹豫过。但是这两天上手后,发现perl的魅力真是无穷无尽的,尤其是对于网工这行需要检查状态、处理大量文本信息,perl自带的正则表达式功能强悍,十分合适。 ...

liudashang123的博客 685
上一篇: URLEncode
下一篇: 对象生命期管理系统
RobinKin
博客等级 码龄22年 17粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值