System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种通过动态规划实现双列元素整齐排列的方法技术_技高网

一种通过动态规划实现双列元素整齐排列的方法技术

技术编号:40781467 阅读:8 留言:0更新日期:2024-03-25 20:25
本发明专利技术涉及瀑布流布局技术领域,且公开了一种通过动态规划实现双列元素整齐排列的方法,包括以下步骤:第一步:构建二维dp数组纵坐标y以及横坐标x;第二步:考虑元素1,先求出最优解;第三步:基于第二步,对多张元素的情况,求最优解,分别得到左右两侧显示的元素;第四步:进行优化,该通过动态规划实现双列元素整齐排列的方法,采用动态规划算法来实现双列元素的整齐排列。相比于现有技术中的贪心算法,动态规划算法能够通过全局优化考虑元素之间的间距和列高度的平衡,使得左右两侧的元素总高度更加接近,从而实现更高度均衡的排列效果。

【技术实现步骤摘要】

本专利技术涉及瀑布流布局,具体为一种通过动态规划实现双列元素整齐排列的方法


技术介绍

1、瀑布流布局是常见的一种多列布局方式,它的特点是在不规则高度的元素排列中,而双列的布局被广泛应用在小屏设备的显示上,这种布局常用于展示图片、博客文章等需要动态加载和排列的内容。尽可能地使左右两侧的元素总高度接近,可以达到美观的效果。

2、现有的技术方案中,主要是采用贪心算法来实现。具体步骤如下:

3、参阅图1,准备好一系列的元素(element1,element2,element3...),假定上图蓝色显示的区域宽度为w。把元素按照原始的宽高比和屏幕宽度的一半进行相乘,得到缩放后适配屏宽的元素高度。例如元素的高度和宽度为:elementh和elementw,缩放后的高度为height:elementh*(w/2.0)/elementw。

4、通过步骤1得到元素在屏幕上显示的一系列的显示高度height1,height2,heigh3...,通过如下方式拆分成两列。定义leftheights为左边的高度和,定义rightheights为右边的高度和。起始值为都为0。遍历所有的高度,如果leftheights大于rightheights,则元素放在右边并给rightheights加上当前的高度,反之则放在左边并给leftheights加上当前的高度。最终效果如图2所示。

5、现有技术采用贪心算法来实现瀑布流布局,虽然能够实现基本的排列效果,但存在以下缺点:

6、高度不均衡:贪心算法只考虑当前最佳的选择,将元素放置在当前列高度最小的位置。这可能导致左右两侧的元素总高度差异较大,使得整体布局看起来不够均衡。这会影响整体排列效果的美观性,为此我们提出了一种通过动态规划实现双列元素整齐排列的方法。


技术实现思路

1、(一)解决的技术问题

2、针对现有技术的不足,本专利技术提供了一种通过动态规划实现双列元素整齐排列的方法,实现双列元素的整齐排列。动态规划算法能够通过全局优化的方式,考虑元素之间的间距和列高度的平衡,从而使得元素之间的间距均匀,最终双列元素的高度基本一致,整体排列效果更加美观。

3、(二)技术方案

4、为实现上述所述目的,本专利技术提供如下技术方案:一种通过动态规划实现双列元素整齐排列的方法,包括以下步骤:

5、第一步:构建二维dp数组纵坐标y以及横坐标x;

6、第二步:考虑元素1,先求出最优解;

7、第三步:基于第二步,对多张元素的情况,求最优解,分别得到左右两侧显示的元素;

8、第四步:进行优化。

9、优选的,第一步中纵坐标y是当前可以考虑的元素,取值范围是0~元素数组的长度-1,横坐标x为用当前考虑的元素集合,尽可能凑到总高度为y时,所能凑成的最大高度max,以及当前所使用的元素下标集合indexes,取值范围是0~高度的一半。

10、优选的,第二步包括以下内容:

11、元素1的高度是1,所以此时dp[0][0]所填写的值是{max:1,indexes:[0]},也就代表用总高度还剩1,并且只考虑元素1的情况下,我们的最优解是选用第一张元素;

12、凑高度2~7:由于当前只有1可以选择,所以最优解只能是选择第一张元素,它们都是{max:1,indexes:[0]};

13、高度1234567;

14、元素1(h=1)1111111。

15、优选的,第三步包括以下内容:

16、s1:凑高度1:由于元素2的高度为2,直接选择元素1,dp[1][0]可以直接沿用dp[0][0]的最优解,也就是{max:1,indexes:[0]};

17、s2:凑高度2:选择元素2,元素2的高度为4,能够凑成的高度为4,在只考虑元素1时的最优解数组dp[0]中找到高度为2时的最优解:dp[0][2],直接沿用下来,也就是{max:1,indexes:[0]};

18、这种情况下只能不选择元素2,而沿用只选择元素1时的解,{max:1,indexes:[0]};

19、s3:省略凑高度3~4的情况,因为得出的结果和凑高度2是一样的;

20、s4:凑高度5:高度为5的情况下:选择元素2,元素2的高度为4,能够凑成的高度为4,此时剩余高度是1,再去只考虑元素1的最优解数组dp[0]中找高度为1时的最优解dp[0][1],发现结果是{max:1,indexes:[0]},这两个高度值4和1相加后没有超出高度的限制,所以得出最优解:{max:5,indexes:[0,1]};

21、不选择元素2,在元素1的最优解数组中找到高度为5时的最优解:dp[0][5],直接沿用下来,也就是{max:1,indexes:[0]},很明显选择元素2的情况下,能凑成的高度更大,所以dp[1][2]的最优解选择{max:5,indexes:[0,1]};

22、s5:凑高度7,dp[3][7]的推理过程是这样的:

23、用最后一张高度为4的元素,加上前三张元素在高度为7-4=3时的最优解也就是dp[2][3],得到结果4+1=5;

24、不用最后一张元素,直接取前三张元素在高度为7时的最优解,也就是dp[2][7],得到结果6;

25、对比这两者的值,得到最优解6。

26、优选的,第四步的具体内容如下:

27、1、由于纵轴的每一层的最优解都只需要参考上一层节点的最优解,因此可以只保留两行;

28、2、由于每次参考值都只需要取上一行和当前位置左边位置的值,因此dp数组只保留一行,把问题转为从右向左求解,并且在求解的过程中不断覆盖当前的值,而不会影响下一次求解。

29、(三)有益效果

30、与现有技术相比,本专利技术提供了一种通过动态规划实现双列元素整齐排列的方法,具备以下有益效果:

31、1、该通过动态规划实现双列元素整齐排列的方法,采用动态规划算法来实现双列元素的整齐排列。相比于现有技术中的贪心算法,动态规划算法能够通过全局优化考虑元素之间的间距和列高度的平衡,使得左右两侧的元素总高度更加接近,从而实现更高度均衡的排列效果。

32、2、该通过动态规划实现双列元素整齐排列的方法,美观性提升:本专利技术的目的是提升整体排列效果的美观性。通过动态规划算法的应用,使得双列元素的排列更加整齐、均衡,图片之间的间距更加一致,从而让整体布局效果更加美观。

33、3、该通过动态规划实现双列元素整齐排列的方法,采用动态规划算法,通过全局优化的方式进行布局控制。相比于现有技术中的贪心算法,动态规划算法能够更精确地调整元素的位置和高度,以实现更理想的排列效果。

本文档来自技高网...

【技术保护点】

1.一种通过动态规划实现双列元素整齐排列的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种通过动态规划实现双列元素整齐排列的方法,其特征在于:第一步中纵坐标y是当前可以考虑的元素,取值范围是0~元素数组的长度-1,横坐标x为用当前考虑的元素集合,尽可能凑到总高度为y时,所能凑成的最大高度max,以及当前所使用的元素下标集合indexes,取值范围是0~高度的一半。

3.根据权利要求1所述的一种通过动态规划实现双列元素整齐排列的方法,其特征在于:第二步包括以下内容:

4.根据权利要求1所述的一种通过动态规划实现双列元素整齐排列的方法,其特征在于:第三步包括以下内容:

5.根据权利要求1所述的一种通过动态规划实现双列元素整齐排列的方法,其特征在于:第四步的具体内容如下:

【技术特征摘要】

1.一种通过动态规划实现双列元素整齐排列的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种通过动态规划实现双列元素整齐排列的方法,其特征在于:第一步中纵坐标y是当前可以考虑的元素,取值范围是0~元素数组的长度-1,横坐标x为用当前考虑的元素集合,尽可能凑到总高度为y时,所能凑成的最大高度max,以及当前所使用的元素下标集合indexes,取...

【专利技术属性】
技术研发人员:康登波
申请(专利权)人:北京小熊博望科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1