You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多维数组中查找最低密度位置 现有VB实现代码问题咨询

多维数组最低密度位置查找问题分析

现有代码缺陷

  • 密度计算逻辑缺失:两个版本均未正确实现「密度」判断逻辑,你需求中的最低密度本质是行内已填充元素数量越少,对应可插入空位的列号越小,现有代码完全没有统计每行的填充率,仅随机判断相邻位状态。
  • 边界情况漏判:半修复版本增加了Uniques(Row).Length <> Column + 1的判断,直接排除了「行末空位」这种最常见的低密度场景,完全无法匹配示例2的情况。
  • 优先级逻辑错误:初始版本同时要求行号和列号都小于当前记录值,会漏掉行号更大但列号更小的符合条件的位置;半修复版本仅比较列号大小,没有优先筛选密度最低的行,会出现高密度行列号更小就被误判为结果的问题。
  • 功能逻辑矛盾:代码注释写的是「已处理的列就跳过」,但判断条件反而只处理ProcessedBits为1的列,逻辑完全相反。

修复方案

首先明确匹配示例的规则:

  1. 密度定义:每行已填充元素(ProcessedBits为1)的数量越少,该行密度越低
  2. 最低密度位置优先取:密度最低的行中,第一个未填充的位置(列号最小的0值位置,或行末的可扩展位置)
  3. 多行行密度相同时,取空位列号最小的位置

修复后代码

Public ProcessedBits()() As Byte

' 存储全局最小密度、目标行列索引(默认从0计数)
Dim minDensity As Integer = Integer.MaxValue
Dim nextLowestDensityColumn As Integer = Integer.MaxValue
Dim nextLowestDensityRow As Integer = Integer.MaxValue

For Row = 0 To Uniques.Length - 1
    ' 计算当前行密度:已填充为1的元素数量
    Dim currentRowDensity As Integer = ProcessedBits(Row).Count(Function(b) b = 1)
    ' 查找当前行第一个未填充的空位
    Dim firstEmptyColumn As Integer = Array.IndexOf(ProcessedBits(Row), CByte(0))
    ' 整行已填满的话,空位为行末下一个位置
    If firstEmptyColumn = -1 Then firstEmptyColumn = ProcessedBits(Row).Length
    
    ' 优先级判断:先比密度更低,密度相同则比空位列号更小
    If currentRowDensity < minDensity OrElse 
       (currentRowDensity = minDensity AndAlso firstEmptyColumn < nextLowestDensityColumn) Then
        minDensity = currentRowDensity
        nextLowestDensityColumn = firstEmptyColumn
        nextLowestDensityRow = Row
    End If
Next

' 找到目标位置后赋值,如果需要1开头的行列号,输出时各加1即可
If nextLowestDensityRow <> Integer.MaxValue Then
    Row = nextLowestDensityRow
End If

内容的提问来源于stack exchange,提问作者SSpoke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:54:03