java 最短路径算法 如何实现有向 任意两点的最短路径

java 最短路径算法 如何实现有向 任意两点的最短路径,第1张

Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式

用OPEN,CLOSE表的方式,其采用的是贪心法的算法策略,大概过程如下:

1声明两个集合,open和close,open用于存储未遍历的节点,close用来存储已遍历的节点

2初始阶段,将初始节点放入close,其他所有节点放入open

3以初始节点为中心向外一层层遍历,获取离指定节点最近的子节点放入close并从新计算路径,直至close包含所有子节点

代码实例如下:

Node对象用于封装节点信息,包括名字和子节点

[java] view plain copy

public class Node {

private String name;

private Map<Node,Integer> child=new HashMap<Node,Integer>();

public Node(String name){

thisname=name;

}

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public Map<Node, Integer> getChild() {

return child;

}

public void setChild(Map<Node, Integer> child) {

thischild = child;

}

}

MapBuilder用于初始化数据源,返回图的起始节点

[java] view plain copy

public class MapBuilder {

public Node build(Set<Node> open, Set<Node> close){

Node nodeA=new Node("A");

Node nodeB=new Node("B");

Node nodeC=new Node("C");

Node nodeD=new Node("D");

Node nodeE=new Node("E");

Node nodeF=new Node("F");

Node nodeG=new Node("G");

Node nodeH=new Node("H");

nodeAgetChild()put(nodeB, 1);

nodeAgetChild()put(nodeC, 1);

nodeAgetChild()put(nodeD, 4);

nodeAgetChild()put(nodeG, 5);

nodeAgetChild()put(nodeF, 2);

nodeBgetChild()put(nodeA, 1);

nodeBgetChild()put(nodeF, 2);

nodeBgetChild()put(nodeH, 4);

nodeCgetChild()put(nodeA, 1);

nodeCgetChild()put(nodeG, 3);

nodeDgetChild()put(nodeA, 4);

nodeDgetChild()put(nodeE, 1);

nodeEgetChild()put(nodeD, 1);

nodeEgetChild()put(nodeF, 1);

nodeFgetChild()put(nodeE, 1);

nodeFgetChild()put(nodeB, 2);

nodeFgetChild()put(nodeA, 2);

nodeGgetChild()put(nodeC, 3);

nodeGgetChild()put(nodeA, 5);

nodeGgetChild()put(nodeH, 1);

nodeHgetChild()put(nodeB, 4);

nodeHgetChild()put(nodeG, 1);

openadd(nodeB);

openadd(nodeC);

openadd(nodeD);

openadd(nodeE);

openadd(nodeF);

openadd(nodeG);

openadd(nodeH);

closeadd(nodeA);

return nodeA;

}

}

图的结构如下图所示:

Dijkstra对象用于计算起始节点到所有其他节点的最短路径

[java] view plain copy

public class Dijkstra {

Set<Node> open=new HashSet<Node>();

Set<Node> close=new HashSet<Node>();

Map<String,Integer> path=new HashMap<String,Integer>();//封装路径距离

Map<String,String> pathInfo=new HashMap<String,String>();//封装路径信息

public Node init(){

//初始路径,因没有A->E这条路径,所以path(E)设置为IntegerMAX_VALUE

pathput("B", 1);

pathInfoput("B", "A->B");

pathput("C", 1);

pathInfoput("C", "A->C");

pathput("D", 4);

pathInfoput("D", "A->D");

pathput("E", IntegerMAX_VALUE);

pathInfoput("E", "A");

pathput("F", 2);

pathInfoput("F", "A->F");

pathput("G", 5);

pathInfoput("G", "A->G");

pathput("H", IntegerMAX_VALUE);

pathInfoput("H", "A");

//将初始节点放入close,其他节点放入open

Node start=new MapBuilder()build(open,close);

return start;

}

public void computePath(Node start){

Node nearest=getShortestPath(start);//取距离start节点最近的子节点,放入close

if(nearest==null){

return;

}

closeadd(nearest);

openremove(nearest);

Map<Node,Integer> childs=nearestgetChild();

for(Node child:childskeySet()){

if(opencontains(child)){//如果子节点在open中

Integer newCompute=pathget(nearestgetName())+childsget(child);

if(pathget(childgetName())>newCompute){//之前设置的距离大于新计算出来的距离

pathput(childgetName(), newCompute);

pathInfoput(childgetName(), pathInfoget(nearestgetName())+"->"+childgetName());

}

}

}

computePath(start);//重复执行自己,确保所有子节点被遍历

computePath(nearest);//向外一层层递归,直至所有顶点被遍历

}

public void printPathInfo(){

Set<MapEntry<String, String>> pathInfos=pathInfoentrySet();

for(MapEntry<String, String> pathInfo:pathInfos){

Systemoutprintln(pathInfogetKey()+":"+pathInfogetValue());

}

}

/

获取与node最近的子节点

/

private Node getShortestPath(Node node){

Node res=null;

int minDis=IntegerMAX_VALUE;

Map<Node,Integer> childs=nodegetChild();

for(Node child:childskeySet()){

if(opencontains(child)){

int distance=childsget(child);

if(distance<minDis){

minDis=distance;

res=child;

}

}

}

return res;

}

}

Main用于测试Dijkstra对象

[java] view plain copy

public class Main {

public static void main(String[] args) {

Dijkstra test=new Dijkstra();

Node start=testinit();

testcomputePath(start);

testprintPathInfo();

}

}

gnodeb的UBBPg2d/UBBPg2f/UBBPg3e单板可以闭塞。gNodeB包含3款基带板,单板型号为UBBPg2d/UBBPg2f/UBBPg3e。可供闭塞的单板包括:BBP,RRU,RFU,UBRI,GTMU。

BTS、NodeB、eNodeB、NR。

2G基站名称升级为BaseTransceiverStation,简称BTS,也叫基站收发信台;3G基站改名为NodeB了,简称NB;4G基站4G技术叫LTE(长期演进),基站叫eNodeB;5G基站的名称NR的全称是NewRadio。

国际电联是主管信息通信技术事务(ICT)的联合国机构。负责划分全球的无线电频谱和卫星轨道,制定技术标准以确保网络和技术的无缝互联,并努力为世界欠发达社区提供ICT接入。

是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra 单源最短路径 算法和Prim 最小生成树 算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

A搜寻算法俗称A星算法。A算法是比较流行的启发式搜索算法之一,被广泛应用于路径优化领域[。它的独特之处是检查最短路径中每个可能的节点时引入了全局信息,对当前节点距终点的距离做出估计,并作为评价该节点处于最短路线上的可能性的量度。

广度优先算法:

1一个初始化数组存储地形所有点位,例如NN的正方形地形,每个点位记录是否未墙面(不可通行)

grid = new int[N, N];//当grid[,]=0标识可以通行,1标识不行 

2构造点位信息解析类

public class Node

    {

        public int[] pos;//经纬度

        public bool finded;//是否寻找过

        public Node parent;//父节点

        public GameObject cube;//当前节点

}

1起点NodeA存入openList集合,

1起点NodeA,终点NodeB;获取openList中的点位(第一次进入获取的是起点),从A点遍历A点周围4个点上,下,左,右(如果追求经确定可以8个点上,下,左,右及斜上斜点),找到可以抵达(是否可抵达通过点位结构数据中finded=1判断,0未)的点位(C1,C2,C3Ci)放入集合tempList, 注意在将C点位存入tempList之前必须记录C点的父节点A(用于步骤4中寻找最终路径);

2第一轮遍历完成后,清空openList,再将tempList赋值给openList,为下一轮遍历做准备

2接下来再次执行 openList 中所有的点位C1,C1Ci,重复1中的步骤

3当最终执行到tempList中的点位N1,N2Ni中有一个点位等于终点B点时,循环结束

4最终通过反向通过链表结构查找父节点,    B->Bparent一直找到Aparent=null截止;

5至此整个广度遍历路径方式完成,效果如下(网络问题~~~~上传不了后期补上,下同)

1一个初始化数组存储地形所有点位,例如NN的正方形地形,每个点位记录是否未墙面(不可通行)

grid = new int[N, N];//当grid[,]=0标识可以通行,1标识不行 

2构造点位信息解析类

/// <summary>

    /// 初始化构造点位数据信息

    /// </summary>

    public class Node

    {

        public int[] pos;//经纬度

        public bool finded;//是否寻找过

        public Node parent;//父节点

        public GameObject cube;//当前节点

        public float FValue;//最终权值(F=G+H)

        public float GValue;//当前节点距离终点的曼哈顿距离

        public Node (int x, int y)//构造点位函数

        {

            pos = new int[] { x, y };

            finded = false;

        }

    }

1起点NodeA存入openList集合,NodeB放入CloseList集合表,

1起点NodeA,终点NodeB;获取openList中的点位(第一次进入获取的是起点),从A点遍历A点周围4个点上,下,左,右(如果追求经确定可以8个点上,下,左,右及斜上斜点),找到可以抵达(是否可抵达通过点位结构数据中finded=1判断,0未)的点位C;将C点存入openList集合; 注 意在将C点位存入tempList之前必须记录C点的父节点A(用于步骤4中寻找最终路径);

2利用点位C,通过A星算法基本公式F(最终估值)=G(C点距离目标B点的曼哈顿距离)+H(C点距离父节点起点距离),计算估值F

3寻找openList中点位估值F最小点位,将其从openList表中取出,放入closeList表

4以closeList表的最后节点closeList[closeListCount - 1]作为新的起点,进行新一轮的(1,2,3)步骤 *** 作

5当最终执行到 closeList[closeListCount - 1] 等于重点NodeB时,循环结束

7最终通过反向通过链表结构查找父节点,    B->Bparent一直找到Aparent=null截止;

8至此整个A星算法路径方式完成,效果如下

说明:A星算法效率比较高,但是最终输出的路径并不是closeList表中点位路径,因存在冗余点位存入closeList表中,及无效但合理的点位;所以最终正确的路径应该通过 B->Bparent反向找到路径,这点通过详细 *** 作算法可以感觉到

后期我将效果图及算法源码公布,谢谢

5G系统由接入网(AN)和核心网(5GC)组成(38300)。若考虑NSA(非独立组网)场景,则还需要考虑4G的网元。

一般来说一个gNB-DU只连接一个gNB-CU。但是为了实现的灵活性,每个gNB-DU也可能连接到多个gNB-CU。

一个gNB CU中的控制面和用户面是分离。一般只有一个CP,但是允许有多个UP。要注意的是,gNB-CU及连接的若干gNB-DU作为一个整体逻辑gNB对外呈现的,只对其他的gNB和所相连的5GC可见。

5g空口协议栈注意事项

5G无侧结构也是在4G基础上演变和优化而来,整体结构还是眼沿用来4G的所谓的“扁平化”结构。即每个基站单独与核心网直连,构成一个星形网络结构。同时基站之间又通过各自的结构彼此相连,又构成来网状结构。5GNR空口架构和协议栈1。

5G中的基站又改了一个名称叫做gNB(规范中没有明确给出到底这个“g”代表是什么,有人说,gNB中的g指的是Next Generation NodeB中的Generation,但是总觉得不太靠谱),以与4G中的基站eNodeB(或eNB)相区分。

占用带宽20M中包含100个RB数目!占用带宽=子载波宽度每RB的子载波数RB数目

子载波宽度=15K

每RB的子载波数=12;

算出实地带宽=18M,加上保护带为20M。

5G NR采用波束赋型的测量和反馈机制,可同时应用于初始接入、控制和数据信道。

波束赋型(Beamforming)是多天线技术的一种,是指gNodeB/UE对PDSCH/PUSCH上/下行信号进行加权,形成对准UE/gNodeB的窄波束,将发射能量对准目标用户,从而提高目标UE/gNodeB的解调信噪比。

扩展资料:

5G网络的主要优势在于,数据传输速率远远高于以前的蜂窝网络,最高可达10Gbit/s,比当前的有线互联网要快,比先前的4G LTE蜂窝网络快100倍。另一个优点是较低的网络延迟(更快的响应时间),低于1毫秒,而4G为30-70毫秒。

由于数据传输更快,5G网络将不仅仅为手机提供服务,而且还将成为一般性的家庭和办公网络提供商,与有线网络提供商竞争。以前的蜂窝网络提供了适用于手机的低数据率互联网接入,但是一个手机发射塔不能经济地提供足够的带宽作为家用计算机的一般互联网供应商。

参考资料来源:百度百科-5G NR

区别是srslte服务于srsran。srsLTE是用于软件定义无线电应用的高性能LTE库。该库支持eNodeB和UE,具有高度模块化,具有最小的模块间或外部依赖性。该库在C中实现,可在商业和开源许可下使用。srsRAN是SoftwareRadioSystems(SRS)开发的4G/5G软件无线电套件。srsRAN具有UE和eNodeB/gNodeB应用,可以与第三方核心网络解决方案一起使用,以建立完整的端到端移动无线网络。

您是想问gnodeb小区支持的子载波间隔cp有两种是什么吗?gnodeb小区支持的子载波间隔cp有两种是NormalCP和ExtendCP。gnodeb小区支持的子载波间隔cp包括NormalCP和ExtendCP两种类型,其中,ExtendCP只有在子载波间隔为60kHz的时候可以支持,其余子载波间隔不支持。

以上就是关于java 最短路径算法 如何实现有向 任意两点的最短路径全部的内容,包括:java 最短路径算法 如何实现有向 任意两点的最短路径、gnodeb哪些单板可以闭塞、作业活动2022-2538682G基站,3G基站,4G基站,5G基站的名称各是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9408245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存