当前位置:网站首页>Différents arbres de recherche binaires [arbre de génération rétrospectif ascendant + recherche de mémoire - - espace - temps]
Différents arbres de recherche binaires [arbre de génération rétrospectif ascendant + recherche de mémoire - - espace - temps]
2022-06-29 03:19:00 【Ren Lindson.】
Arbre de construction+Recherche de mémoire
Préface
Premièrement,Pour la génération d'arbres binaires,Détermination récursive descendante des intervalles de sous - arbres,Arbre de génération d'épissage descendant.
Deuxièmement,Pour beaucoup de calculs répétés,Les résultats peuvent être mémorisés avec un espace supplémentaire,Je le récupérerai quand je le rencontrerai plus tard.,Réduire considérablement la complexité temporelle,En général, c'est la complexité exponentielle.,Cela est particulièrement nécessaire.
Un.、Différents arbres de recherche binaires
2.、Arbre de construction+Recherche de mémoire
1、Génération d'arbres binaires par rétrotraçage récursif
// Différents arbres de recherche binaires.
public class NumTrees {
/* target:Nombre de noeuds donnés,Renvoie le nombre de différents arbres de recherche binaires. Noeud racine par noeud,La multiplication du nombre de sous - arbres gauche et droit est le nombre de différents arbres binaires. De bas en haut,Arbre rétrospectif. */
public int numTrees(int n) {
return numTrees(1, n);
}
// De bas en haut,Génération rétrospective.
private int numTrees(int begin, int end) {
// Impossible de diviser à nouveau,Nombre d'enfants retournés à gauche,1- Oui.nullNoeud.
if (begin > end) return 1;
// Obtenez le nombre de combinaisons d'enfants de gauche et de droite .
int rs = 0;
for (int i = begin; i <= end; i++) {
// iComme noeud racine,Diviser en deux sections, Comme sous - arbres de gauche et de droite .
rs += numTrees(begin, i - 1) * numTrees(i + 1, end);
}
return rs;
}
}
2、Recherche de mémoire–Espace contre temps
// Le scénario ci - dessus a expiré , Si vous obtenez simplement un nombre différent d'arbres binaires , Il n'est pas nécessaire de simuler chaque L'intervalle génère un sous - arbre , Enregistrer après la première génération , On se retrouve dans cette section , Valeur directe .
class NumTrees2 {
/* target:Nombre de noeuds donnés,Renvoie le nombre de différents arbres de recherche binaires. Noeud racine par noeud,La multiplication du nombre de sous - arbres gauche et droit est le nombre de différents arbres binaires. De bas en haut,Arbre rétrospectif. Espace contre temps,Définitionf[i][j]:[i,j] Combien de sous - arbres sont possibles , L'affectation est calculée pour la première fois , Si on se croise plus tard, on n'a pas à oublier , Retirer directement pour . */
public int numTrees(int n) {
// Définition[i,j] Combien de sous - arbres peuvent être générés .
int[][] f = new int[n + 1][n + 1];
// De bas en haut,Génération rétrospective.
return numTrees(1, n, f);
}
// De bas en haut,Génération rétrospective.
private int numTrees(int begin, int end, int[][] f) {
// Impossible de diviser à nouveau,Nombre d'enfants retournés à gauche,1- Oui.nullNoeud.
if (begin > end) return 1;
// Recherche de mémoire
if (f[begin][end] != 0) return f[begin][end];
// Obtenez le nombre de combinaisons d'enfants de gauche et de droite .
// La première fois que je touche cette section , Et les résultats qu'il a obtenus, rappelez - vous .
for (int i = begin; i <= end; i++) {
// iComme noeud racine,Diviser en deux sections, Comme sous - arbres de gauche et de droite .
f[begin][end] += numTrees(begin, i - 1, f) * numTrees(i + 1, end, f);
}
// Renvoie le nombre de sous - arbres calculés pour la première fois dans cet intervalle .
return f[begin][end];
}
}
Résumé
1) Comment faire un arbre binaire , Diviser Récursivement les intervalles de gauche et de droite de haut en bas , De bas en haut, les sous - arbres gauche et droit .
2) La recherche de mémoire est utilisée pour éviter le double comptage ,Réduire la complexité temporelle, En particulier, la complexité exponentielle du temps .
Références
边栏推荐
- [linear algebra] 1.1 second and third order determinants
- Jerry's watch obtains alarm mode settings [chapter]
- Basic MySQL database operations
- Jerry's watch begins to move [chapter]
- Nvisual helps integrators transform
- The method of displaying or closing the network flying line in Allegro design
- 測試入門——集成測試
- Certification training | streamnational certification training phase 2
- 【线程通信】
- Etcd教程 — 第六章 Etcd之核心API V3
猜你喜欢

SQL training 01
![[线性代数] 1.1 二阶与三阶行列式](/img/ea/70b59c64d3287a887e371a9181fe45.png)
[线性代数] 1.1 二阶与三阶行列式

逆序对对数计算,顺序对对数计算——归并排序

FPGA(七)RTL代码之三(复杂电路设计2)

What is a thread pool?

Lanbao sensor technology rushes to the scientific innovation board: annual revenue of 350million yuan xuyongtong family has a strong color

2022-2028 global sound insulation coating industry research and trend analysis report

2022-2028 global UAV detection radar industry research and trend analysis report

LinkedList learning
![[線性代數] 1.1 二階與三階行列式](/img/ea/70b59c64d3287a887e371a9181fe45.png)
[線性代數] 1.1 二階與三階行列式
随机推荐
【雲原生】這麼火,你不來了解下?
[线性代数] 1.2 全排列和对换
Movement state change of monitoring device of Jerry's watch [chapter]
2022-2028 global long wave infrared camera and camera core industry research and trend analysis report
Tortoise 没有显示绿色图标
目前市面上增额终身寿险利率最高的产品是哪个?
For safe login of wechat applet, the openid returned by wechat must be verified first to ensure the uniqueness of information.
广发证券开户是真的安全可靠吗
set time format
MATALB signal processing - signal transformation (6)
[Shangshui Shuo series] the simplest subtitle configuration
SQL training 01
What is a thread pool?
MySQL advanced SQL statement (Part 2)
Etcd教程 — 第七章 Etcd之事务API
Kubernetes: container resource requirements and constraints (constraints)
Equal wealth
There's a mystery behind the little login
Tortoise does not display a green Icon
LeetCode 每日一题——324. 摆动排序 II