根据一组对数组有效的元素将列表拆分为数组的算法

艾伦

这是一个“最佳算法”问题。

我需要将混合值'a','b'和'c'的数组A分解为一个新的二维数组B,该数组包含相同的值,但根据以下规则在整个第二维上进行拆分。

B记录开始于:

a: [a] || [a, a] || [a, b] || [a, b, b]
b: [b] || [b, b] || [b, a] || [b, b, a] || [b, b, b] || [b, b, b, b]
c: [c]
  • 订单保持

  • A中的每个值只能在B中使用一次

例如,我有一个数组A:

['a', 'c', 'b', 'b', 'a', 'a', 'a', 'c', 'b', 'b', 'b', 'b']

我需要将其拆分为二维数组B:

[
 ['a'],
 ['c'],
 ['b', 'b', 'a'],
 ['a', 'a'],
 ['c'],
 ['b', 'b', 'b', 'b']
]

我写的代码是很多嵌套的if / else语句。仅包装在while循环中的“ a”代码:

while(i<arrA.length) {
 if(arrA[i] == a) {
  if(arrA[i+1] == a) {
   arrB[] = [arrA[i], arrA[i+1]]; //creates arrB[n]['a', 'a']
   i = i+2;
   continue;
  } elseif (arrA[i+1] == b) {
   if(arrA[i+2] == b) {
    arrB[] = [arrA[i], arrA[i+1], arrA[i+2]]; //creates arrB[n]['a', 'b', 'b']
    i = i+3;
    continue;
   } elseif (arrA[i+2] != b) {
    arrB[] = [arrA[i], arrA[i+1]]; //creates arrB[n]['a', 'b']
    i = i+2;
    continue;
   }
  } elseif (arrA[i+1] == c) {
   arrB[] = [arrA[i]]; //creates arrB[n]['a']
   i++;
   continue;
  }
 } elseif (...)
 i++;
}

“ c”的代码短,而“ b”的代码长”。在这种情况下,有没有一种算法会更简洁?如果那很重要,我将用PHP编写。

罗伯·贝利(Rob Baillie)

有两个技巧:

  • 任何一系列检查相等性的if语句都可以简化为对数组的检查。
  • 您可以循环记住每个循环中的“上一个”事物,并采取相应的行动。

那是:

  • 您可以创建一个包含所有可能的有效组合的数组
  • 然后,您可以遍历序列数组,并在每个步骤中检查您所拥有的是否与可能性列表中的组合匹配。
  • 如果发现不匹配的内容,则假定您以前的外观匹配,并将其放入匹配的组合列表中。

它可能不是绝对最佳的-但它肯定比您现在拥有的更具扩展性。

<?php

    $aPossibleCombinations = array( 'a', 'aa', 'ab', 'abb', 'b', 'bb', 'ba', 'bba', 'bbb', 'bbbb', 'c' );

    $aThingsToMatch = array( 'a', 'c', 'b', 'b', 'a', 'a', 'a', 'c', 'b', 'b', 'b', 'b' );

    $aMatchedThings = array();

    $sPreviousThing = '';
    $sCurrentThing  = '';

    foreach( $aThingsToMatch as $sSingleThing ) {

        $sCurrentThing .= $sSingleThing;

        if ( !in_array( $sCurrentThing, $aPossibleCombinations ) ) {
            $aMatchedThings[] = $sPreviousThing;
            $sCurrentThing = $sSingleThing;
        }

        $sPreviousThing = $sCurrentThing;
    }

    if ( in_array(  $sCurrentThing, $aPossibleCombinations ) ) {
        $aMatchedThings[] = $sPreviousThing;
        $sCurrentThing = '';
    }

    echo( "Matched Things: \r\n" );
    var_dump( $aMatchedThings );

    echo( "Remaining Things: \r\n" );
    var_dump( $sCurrentThing );

?>

我应该说,我在其中留了一个错误供您查找。它适用于当前的aThingsToMatch,但有可能使其中断。我将其留给读者作为练习...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一种基于对数组有效的元素集将列表拆分为数组的算法

来自分类Dev

根据Python中的一组索引将列表拆分为子列表

来自分类Dev

Ruby / Rails - 根据参数将数组分为两组并显示两者的最有效方法

来自分类Dev

Vertica:将字符串拆分为数组并分组以获得一组唯一值?

来自分类Dev

这是将一个数组拆分为两个以上的最有效方法吗?

来自分类Dev

根据另一个数组的顺序对数组进行有效排序

来自分类Dev

PostgreSQL:有效地将JSON数组拆分为行

来自分类Dev

将字符串拆分为数组并修剪每个值的有效方法-Swift

来自分类Dev

将字符数组拆分为单元格的最有效方法?

来自分类Dev

将字符串拆分为数组的有效方法-PHP

来自分类Dev

PostgreSQL:有效地将JSON数组拆分为行

来自分类Dev

查看一组值是否出现在数组中的有效方法?

来自分类Dev

将数组的行连接为一维数组的有效算法方法

来自分类Dev

将一个大的numpy数组拆分为带有分组索引列表的单独数组

来自分类Dev

根据一组值将一列拆分为多列

来自分类Dev

对象不能作为 React child () 有效。如果您打算渲染一组子项,请使用数组

来自分类Dev

根据单独数组的顺序对数组集合进行排序的最有效方法

来自分类Dev

计算一组关系的整数映射的更有效算法

来自分类Dev

将数组的随机元素/拆分为大块

来自分类Dev

将数组的元素分为3组

来自分类Dev

根据值将数组拆分为多个数组-PHP

来自分类Dev

根据值何时更改,将数组拆分为更小的数组

来自分类Dev

如何通过某个属性的值将元素数组拆分为组?

来自分类Dev

将数组拆分为数组

来自分类Dev

将数组拆分为新数组(每个数组都有唯一的名称)

来自分类Dev

从3个数组生成最接近的三元组的有效算法?

来自分类Dev

算法将数组拆分为子数组,其中所有子数组中的最大和尽可能小

来自分类Dev

根据键后缀将一组平面记录(散列)拆分为规范化散列的最佳方法?

来自分类Dev

将每个数组列表/列表元素拆分为整数和字符串的元组

Related 相关文章

  1. 1

    一种基于对数组有效的元素集将列表拆分为数组的算法

  2. 2

    根据Python中的一组索引将列表拆分为子列表

  3. 3

    Ruby / Rails - 根据参数将数组分为两组并显示两者的最有效方法

  4. 4

    Vertica:将字符串拆分为数组并分组以获得一组唯一值?

  5. 5

    这是将一个数组拆分为两个以上的最有效方法吗?

  6. 6

    根据另一个数组的顺序对数组进行有效排序

  7. 7

    PostgreSQL:有效地将JSON数组拆分为行

  8. 8

    将字符串拆分为数组并修剪每个值的有效方法-Swift

  9. 9

    将字符数组拆分为单元格的最有效方法?

  10. 10

    将字符串拆分为数组的有效方法-PHP

  11. 11

    PostgreSQL:有效地将JSON数组拆分为行

  12. 12

    查看一组值是否出现在数组中的有效方法?

  13. 13

    将数组的行连接为一维数组的有效算法方法

  14. 14

    将一个大的numpy数组拆分为带有分组索引列表的单独数组

  15. 15

    根据一组值将一列拆分为多列

  16. 16

    对象不能作为 React child () 有效。如果您打算渲染一组子项,请使用数组

  17. 17

    根据单独数组的顺序对数组集合进行排序的最有效方法

  18. 18

    计算一组关系的整数映射的更有效算法

  19. 19

    将数组的随机元素/拆分为大块

  20. 20

    将数组的元素分为3组

  21. 21

    根据值将数组拆分为多个数组-PHP

  22. 22

    根据值何时更改,将数组拆分为更小的数组

  23. 23

    如何通过某个属性的值将元素数组拆分为组?

  24. 24

    将数组拆分为数组

  25. 25

    将数组拆分为新数组(每个数组都有唯一的名称)

  26. 26

    从3个数组生成最接近的三元组的有效算法?

  27. 27

    算法将数组拆分为子数组,其中所有子数组中的最大和尽可能小

  28. 28

    根据键后缀将一组平面记录(散列)拆分为规范化散列的最佳方法?

  29. 29

    将每个数组列表/列表元素拆分为整数和字符串的元组

热门标签

归档