设计java 用序列(100,65,88,93,145,118,138,112,188,173,42,75,20,197)建立一个二叉排序树,按照关键字输入顺序画出该树,并求在等概率情况下查找成功的平均查找长度。
时间: 2023-08-03 21:07:18 浏览: 40
首先,建立二叉排序树的步骤如下:
1. 将第一个数 100 作为根节点。
2. 将第二个数 65 与根节点比较,小于根节点则作为左子节点,否则作为右子节点。
3. 将第三个数 88 与根节点比较,小于根节点则与左子节点比较,大于左子节点则作为左子节点的右子节点,否则作为左子节点的左子节点。
4. 依次对每个数进行比较插入,最终得到如下的二叉排序树:
```
100
/ \
65 145
/ \ \
42 88 188
/ \ \
75 93 197
/ \
112 138
/
118
/
20
```
接下来,我们需要计算在等概率情况下查找成功的平均查找长度(ASL)。由于每个关键字出现的概率相等,因此可以使用公式 ASL = (深度之和) / (节点总数) 来求解。
节点总数为 14,深度之和为 1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 + 5 + 5 + 5 + 5 = 47。
因此,ASL = 47 / 14 = 3.357。
相关问题
用java设计自增序列算法。
自增序列算法可以用一个计数器来实现。我们可以定义一个计数器变量,每次需要生成新的序列号时,将计数器加1,然后将计数器的值作为序列号返回。
以下是一个简单的Java代码示例:
```
public class SequenceGenerator {
private static int counter = 0;
public static synchronized int getNext() {
return ++counter;
}
}
```
在这个示例中,我们使用了一个静态的计数器变量 `counter`,并且将 `getNext()` 方法设置为同步方法,以避免多线程并发访问时出现问题。
每次调用 `getNext()` 方法时,计数器的值都会加1,并且返回加1后的值作为序列号。由于我们使用了同步方法,所以多线程并发访问时也能够确保每个序列号都是唯一的。
使用这个自增序列算法时,可以通过调用 `SequenceGenerator.getNext()` 方法来获取下一个序列号。例如:
```
int nextSeq = SequenceGenerator.getNext();
System.out.println("Next sequence number: " + nextSeq);
```
这将输出类似于 "Next sequence number: 1" 的结果,表示下一个序列号是1。每次调用 `getNext()` 方法时,序列号都会自动递增。
用74ls112设计110序列检测器
首先,我们需要了解一下74ls112的功能和引脚定义:
74ls112是一种双J-K触发器,具有两个独立的J、K输入端,以及时钟和异步置位控制端。它的引脚定义如下:
1. CP:时钟输入端
2. MR:异步置位输入端
3. J1:第一个J输入端
4. K1:第一个K输入端
5. Q1:第一个输出端
6. Q1':第一个输出端的反相输出端
7. GND:接地
8. Q2':第二个输出端的反相输出端
9. Q2:第二个输出端
10. K2:第二个K输入端
11. J2:第二个J输入端
12. Vcc:电源正极
接下来,我们可以按照以下步骤设计110序列检测器:
1. 将CP、MR、J1、K1和Q1连接在一起,构成第一个触发器。
2. 将Q1连接到K2和J2,构成第二个触发器。
3. 将Q2连接到J1,构成一个反馈回路。
4. 将110序列输入到J1和K2,即J1=1,K2=0。
5. 将时钟信号输入到CP。
6. 检测第二个输出端Q2的状态,如果是1,则表示检测到了110序列。
需要注意的是,在使用74ls112设计电路时,需要按照数据手册中的电气特性和时序要求进行设计,以确保电路正常工作。