当前位置: 首页 > 知识库问答 >
问题:

带有4个节点(简单森林)的打印树,用于检查基准

宋高寒
2023-03-14

我实现了一种实验性OOP语言,现在使用Storage基准测试垃圾回收机制。现在我想检查/打印以下小深度基准(n=2,3,4,...)。

树(带4个子节点的森林)由buildTreeDepth方法生成。代码如下:

import java.util.Arrays;

public final class StorageSimple {

    private int count;
    private int seed = 74755;

    public int randomNext() {
        seed = ((seed * 1309) + 13849) & 65535;
        return seed;
    }

    private Object buildTreeDepth(final int depth) {
        count++;
        if (depth == 1) {
            return new Object[randomNext() % 10 + 1];
        } else {
            Object[] arr = new Object[4];
            Arrays.setAll(arr, v -> buildTreeDepth(depth - 1));
            return arr;
        }
    }

    public Object benchmark() {
        count = 0;
        buildTreeDepth(7);
        return count;
    }

    public boolean verifyResult(final Object result) {
        return 5461 == (int) result;
    }


    public static void main(String[] args) {
        StorageSimple store = new StorageSimple();
        System.out.println("Result: " + store.verifyResult(store.benchmark()));
    }   
}

是否有一种简单/直接的方法来打印buildTreeDepth生成的树?只有n=3,4,5的短树。

共有2个答案

余阳秋
2023-03-14

不要使用对象数组,而是使用像ArrayList这样的列表实现。为了获得更好的结果,子类ArrayList也保存一个“level”值,并向toString()方法添加缩进。

程振濂
2023-03-14

正如其他人已经建议的那样,您可以选择一些库来实现这一点。但是,如果您只想在命令行中测试一个简单的算法,您可以执行以下操作,我在命令行打印树时总是使用这些操作(按句柄编写,可能有一些错误。相信您可以获得此BFS算法的工作原理):

queue.add(root);
queue.add(empty);
int count = 1;
while (queue.size() != 1) {
    Node poll = queue.poll();
    if (poll == empty) {
        count = 1;
        queue.add(empty);
    }
    for (Node n : poll.getChildNodes()) {
        n.setNodeName(poll.getNodeName(), count++);
        queue.add(n);
    }
    System.out.println(poll.getNodeName());
}

样本输出:

1
1-1 1-2 1-3 1-4
1-1-1 1-1-2 1-1-3 1-2-1 1-2-2 1-3-1 1-3-2 1-4-1
...

在您的情况下,您使用数组,这似乎更容易打印。

 类似资料:
  • 我试图打印我的二叉搜索树的每个节点的所有值和深度。我很难想出一种递归计算深度的方法。到目前为止,我有一种仅打印树的每个值的方法。我将不胜感激一些指导,因为我觉得我让它变得比应有的更难。

  • 1 Bagging   Bagging采用自助采样法(bootstrap sampling)采样数据。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,样本仍可能被选中, 这样,经过m次随机采样操作,我们得到包含m个样本的采样集。   按照此方式,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基本学习器,再将这些基本学习

  • 我正在使用jsTree显示一个树。我想选择树中可以使用的所有节点。这工作得很好。 但是,这将展开所有节点,并且拥有一个大树将把其余的内容一直往下推。 我想在检查所有节点后折叠树,但使用不起作用。 有人有办法解决吗?

  • 本文向大家介绍如何打印二叉树每层的节点?相关面试题,主要包含被问及如何打印二叉树每层的节点?时的应答技巧和注意事项,需要的朋友参考一下 考察点:二叉树   实现代码:  

  • 问题就在这里: 我目前必须打印一个a4的横向页面,其中包含当前javaFx场景的“部分”。 我必须打印的部分是BorderPane的部分,我需要打印左侧、中间和底部节点,所以打印的页面应该如下所示: 我将此作为输出(仅供参考): 感谢您的帮助/阅读,感谢您的帮助。 更新01: 这真是让人摸不着头脑... 更新02: 使用快照和imageViews进行新尝试: 我把它除以600(就像Resoluti

  • 我想让SSL和Kafka一起运行,让它更安全。我下载了Kafka并安装了它。我按照说明为SSL创建证书和信任库,没有任何问题。我将以下内容添加到我的config/server.properties中 启动Zookeeper后,我在启动kafak时收到此错误:[2017-12-07 16:02:52,155]ERROR[Controller id=0, targetBrokerId=0]连接到节点0