相关疑难解决方法(0)

PHP数组性能

我正在测试一个2d bin包装的算法,我选择PHP来模拟它,因为它现在是我的面包和黄油语言.

正如您在http://themworks.com/pack_v0.2/oopack.php?ol=1上看到的那样,它运行良好,但您需要等待大约10-20秒才能打包100个矩形.对于一些难以处理的集合,它将达到php的30s运行时限制.

我做了一些分析,它表明大部分时间我的脚本经过一个小的2d数组的不同部分,其中包含0和1.它要么检查某个单元格是否等于0/1,要么将其设置为0/1.它可以进行数百万次这样的操作,每次都需要几微秒.

我想我可以使用静态类型语言中的一系列布尔值,事情会更快.甚至可以创建一个1位值的数组.我正在考虑将整个事物转换为某种编译语言.PHP对它不好吗?

如果我确实需要将其转换为C++,那么自动转换器有多好?我的脚本只是用于基本数组和对象操作的循环.

编辑.这个函数被调用比任何其他函数更多.它读取一个非常简单的对象的一些属性,并通过一个小数组的一小部分来检查是否有任何元素不等于0.

function fits($bin, $w, $h, $x, $y) {

    $w += $x;
    $h += $y;

    for ($i = $x; $i < $w; $i++) {

        for ($j = $y; $j < $h; $j++) {

            if ($bin[$i][$j] !== 0) {
                return false;
            }
        }
    }

    return true;    
}
Run Code Online (Sandbox Code Playgroud)

更新:我尝试使用1d数组而不是2d作为建议的答案之一.由于我需要始终可以访问当前的bin宽度,因此我决定将所有内容包装在对象中.此外,现在在每个循环中都需要计算索引.现在脚本需要更多时间来运行.其他技术并没有带来太多的性能提升,而是使代码的可读性降低.我猜是时候嘻哈了.

更新:既然hiphop php只在linux上运行,而我没有,我决定用C++重写整个内容.刷新旧技能真好.另外,如果我找到了使用hiphop的方法,那么比较手写的C++代码和hiphop会产生的代码将会很有趣.

更新:我用c ++重写了这个东西,平均来说它的工作速度提高了20倍,并且使用的内存更少.让我看看我能否做得更快.

php arrays performance

36
推荐指数
4
解决办法
3万
查看次数

PHP数组的时间/空间复杂性

除了手动计算之外,有没有办法或资源在PHP中查找Array实现的时间和空间复杂度?

PHP中的数组实际上是一个有序映射.映射是将值与键关联的类型.此类型针对多种不同用途进行了优化; 它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多.由于数组值可以是其他数组,因此树和多维数组也是可能的.- php.net

据我所知,它似乎具有地图的一般复杂性

php arrays complexity-theory

12
推荐指数
2
解决办法
6778
查看次数

找出人口最多的年份(最有效的解决方案)

给定两个数组;$births包含表示某人出生时间的出生年份列表和表示某人$deaths死亡时间的死亡年份列表,我们如何找到人口最多的年份?

例如,给定以下数组:

$births = [1984, 1981, 1984, 1991, 1996];
$deaths = [1991, 1984];
Run Code Online (Sandbox Code Playgroud)

人口最多的年份应该是1996,因为3在那一年里还有人活着,这是所有年份中人口数量最多的年份。

这是运行的数学:

| 出生 | 死亡 | 人口 |
|-------|-------|------------|
| 1981 | | 1 |
| 1984 | | 2 |
| 1984 | 1984 | 2 |
| 1991 | 1991 | 2 |
| 1996 | | 3 |

假设

我们可以有把握地假设,某人出生的那一年人口可以增加一,而某人死亡的那一年人口可以减少一。所以在这个例子中,1984 年有 2 人出生,1984 年有 1 人死亡,这意味着当年人口增加了 1。

我们也可以安全地假设死亡人数永远不会超过出生人数,并且当人口为 0 时不会发生死亡。

我们还可以安全地假设两者中的年份$deaths$births永远不会是负值或浮点值( …

php language-agnostic arrays algorithm

11
推荐指数
1
解决办法
2577
查看次数

PHP删除重复的XML提要条目

您好我正在使用PHP解析XML文件以更好的格式创建另一个XML文件,我最终将用它来填充无序的HTML列表.

但XML feed有重复的条目,因此我的格式化输出也有重复的条目.我如何循环遍历Feed并以某种方式删除重复项?尽可能使用PHP.我是一个新手,我不知道该如何处理这个.

这是一个典型的输出(我的格式化XML与重复):

    <films>
    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Death Race 2</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=377029</filmlink>
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink
    </film>

    <film>
    <filmtitle>Shattered Glass</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=UKIC48</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>

    <film>
    <filmtitle>The Brothers Bloom</filmtitle>
    <filmlink>http://www.picturebox.tv/watchnow?id=380196</filmlink>
    </film>

...and so on...
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒.谢谢.

更新:

我在循环遍历feed之前定义了一个数组,如下所示:

$filmList = array();
Run Code Online (Sandbox Code Playgroud)

在整个列表中循环时,我使用以下命令添加了条目:

array_push($filmsForList, array("filmTitle" => $title, "pictureLink" => $pictureLink);
Run Code Online (Sandbox Code Playgroud)

其中$ filmTitle和$ filmLink是解析后的XML中的值.我该如何删除重复项?或者阻止他们进入第一名?

谢谢...

html php xml parsing

1
推荐指数
1
解决办法
2734
查看次数