字典树(二维数组)

字典树的递归感觉和kmp的next数组有点像。

就我而言,字典树难理解不是对树的疑问,而是对数组里面该填什么数字感到疑惑(我很菜,想了好久才迷糊过来)。

例如:

3
abc
abd
bcd

U数组(i从0开始)

输入abc时

第一行 1 0 0 0 ...

第二行 0 2 0 0 ...       

第三行 0 0 3 0...

输入abd时

第一行 1 0 0 0...

第二行 0 2 0 0...

第三行 0 0 3 4...

输入bcd时

第一行 1 0 0 5...

第二行 0 2 0 0

第三行0 0 3 4

第四行 0 0 0 0

第五行 0 0 0 0

第六行 0 0 6 0

第七行 0 0 0 7

自己手磨时每一行加上 i 的值可能会好理解

	int n;int idx=1;
	cin>>n;
	while(n--)
	{
		int j=0;
		cin>>C+1;
		int len=strlen(C+1);
		for(int i=1;i<=len;i++)
		{
			int x=C[i]-'a'+1;
			if(U[j][x]==0)
			{
				U[j][x]=idx;
				idx++;
			}
			j=U[j][x];
		}
		V[j]=1;//如果是单词,加上单词结尾的判断
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用机器学习或深度学习算法对这8个二维数组进行分类。例如,你可以使用 scikit-learn 库中的分类算法,如逻辑回归、决策树、随机森林等。 首先,你需要将数据处理成适合模型输入的格式,并将其分为训练数据和测试数据。然后,你可以训练分类模型并使用测试数据评估模型的性能。 代码示例: ``` import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 假设你有8个二维数组,每个数组的形状为 (100, 20) arrays = [np.random.rand(100, 20) for _ in range(8)] # 创建标签 labels = [i % 2 for i in range(8)] # 将数据分为训练数据和测试数据 X_train, X_test, y_train, y_test = train_test_split(arrays, labels, test_size=0.2) # 训练逻辑回归模型 model = LogisticRegression() model.fit(X_train, y_train) # 评估模型 acc = model.score(X_test, y_test) print("模型准确率: {:.2f}%".format(acc * 100)) ``` 注意:这仅是一个简单的示例,实际上,根据你的数据特征和问题复杂度,你可能需要选择其他算法或调整模型超参数。 ### 回答2: 如果你有8个二维数组,并且想要使用Python进行分类,你可以根据数组的某些属性或特征将它们分组。下面是一个简单的方法来实现这个过程: 1. 定义一个空字典或列表,用于储分类后的数组。例如:categories = {} 2. 遍历每个数组: - 对于每个数组,确定其特征或属性,例如长度、宽度、数值等。将这些特征保为一个元组或列表,例如features = (length, width, values)。 - 检查字典中是否已在具有相同特征的分类,如果在,则将当前数组添加到该分类中,如categories[features].append(array);如果不在,则为该特征创建一个新的分类,并将当前数组添加到该分类中,如categories[features] = [array]。 3. 最后,你将得到一个字典categories,其中键是特征,值是具有该特征的所有数组的列表。 这是一个简单的分类方法,但你也可以根据自己的需求进行修改和扩展。 ### 回答3: 要将8个二维数组进行分类,可以使用Python中的列表和字典来实现。下面给出一个示例代码来对8个二维数组进行分类。 ```python # 定义8个二维数组(假设每个数组的大小相同) array1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] array2 = [[10, 11, 12], [13, 14, 15], [16, 17, 18]] array3 = [[19, 20, 21], [22, 23, 24], [25, 26, 27]] array4 = [[28, 29, 30], [31, 32, 33], [34, 35, 36]] array5 = [[37, 38, 39], [40, 41, 42], [43, 44, 45]] array6 = [[46, 47, 48], [49, 50, 51], [52, 53, 54]] array7 = [[55, 56, 57], [58, 59, 60], [61, 62, 63]] array8 = [[64, 65, 66], [67, 68, 69], [70, 71, 72]] # 创建一个字典用于储分类结果 categories = {} # 将数组进行分类,假设分类方式是按照数组大小来分类 for array in [array1, array2, array3, array4, array5, array6, array7, array8]: size = len(array) # 数组的大小为行数 if size in categories: categories[size].append(array) else: categories[size] = [array] # 输出分类结果 for size, arrays in categories.items(): print(f"大小为{size}的数组有:") for array in arrays: print(array) print() ``` 该代码将8个二维数组按照大小进行了分类,分类结果会输出到控制台。可以根据具体需求,修改分类方式和输出方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值