小编csi*_*guz的帖子

PHP中可扩展的Trie实现

教程之后,我遇到了Trie数据结构.从最近我一直用PHP编程,我试图用这个来解决讲座的问题.我能够获得正确的答案,但仅适用于较小的输入(输入#10是2,82 MB文件).显然,我的算法不能很好地扩展.它还超过了PHP的默认128 MB内存限制.

我的算法

Trie中存储了一个根节点.每个节点都有一个"子"成员.我使用标准的PHP数组来存储孩子.子键表示一个字符(当前我为每个字符创建一个新节点,az小写,映射到0-25),子值是对另一个节点的引用.

由于问题,每个节点都有"重量"成员.我想优化我的代码,(甚至使用不同的方法从stratch重写它),以便它可以通过大输入的测试.

我对如果可能的话,使用大输入使这个数据结构在PHP中工作的解决方案感兴趣.

我的代码

TrieNode类存储树层次结构.

class TrieNode {
    // weight is needed for the given problem
    public $weight;
    /* TrieNode children, 
    * e.g. [0 => (TrieNode object1), 2 => (TrieNode object2)]
    * where 0 stands for 'a', 1 for 'c'
    * and TrieNode objects are references to other TrieNodes.
    */
    private $children;

    function __construct($weight, $children) {
        $this->weight = $weight;
        $this->children = $children;
    }

    /** map lower case …
Run Code Online (Sandbox Code Playgroud)

php algorithm tree trie data-structures

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

调用对象重置?

看到重置功能在对象上起作用,我感到很惊讶。

<?php

class C {
  private $a = 'a';
  protected $b = 'b';
  public $c = 'c';
}

$c = new C;
echo reset($c); // a
Run Code Online (Sandbox Code Playgroud)

看起来如果reset收到一个对象,它首先将其转换为数组?在文档的任何地方都没有提到。这是实施细节吗?

php

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

反编译 for-each 循环

反编译以下 for-each 循环的 .class 文件会产生有趣的结果。

来源 - Main.java:

public class Main {
    public static void main(String[] args) {
        String[] names = new String[3];
        int var3 = 3;

        for (String name : names) {
            System.out.println(name);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果 - Main.class:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

public class Main {
    public Main() {
    }

    public static void main(String[] args) {
        String[] names = new String[3];
        int var3 = …
Run Code Online (Sandbox Code Playgroud)

java bytecode

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

标签 统计

php ×2

algorithm ×1

bytecode ×1

data-structures ×1

java ×1

tree ×1

trie ×1