当前位置:网站首页>Tas (file d'attente prioritaire)
Tas (file d'attente prioritaire)
2022-07-02 12:07:00 【La nourriture n'est pas bonne.】
Table des matières
Obtenir l'élément chef d'équipe
🥬La nature du tas

Résumé:UnArbre binaire completParTraversée séquentielle Comment stocker dans un tableau ,L'utilisation principale de cette méthode est la représentation du tas.
🥬Classification des piles

🥬Réglage vers le bas du tas
Il y a maintenant un tableau, Logiquement, c'est un arbre binaire complet. ,On passe parNoeud racineAu débutAjustement vers le bas L'algorithme peut l'ajuster à un petit tas ou à un gros tas .L'algorithme de réglage vers le bas a une prémisse:Les sous - arbres gauche et droit doivent être un tas,Pour ajuster.
Prenons par exemple le petit tas:
1、 Comparez d'abord les noeuds gauche et droit de l'enfant ,Prenez le minimum.
2、 Comparez ce noeud enfant plus petit avec le noeud père , Si le noeud de l'enfant <Noeud père,Echange,Au contraire,Pas d'échange..
3、En boucle, Si l'indice du noeud enfant dépasse la limite , Ça veut dire que c'est la fin ,C'est fini..
Exemple de code:
//parent: Noeud racine de chaque arbre
//len: Position finale du réglage de chaque arbre
public void shiftDown(int parent,int len){
int child=parent*2+1; //Parce que le tas est un arbre binaire complet,Pas d'enfant de gauche, pas d'enfant de droite, Donc au moins il y a un enfant de gauche ,Au moins.1Un enfant
while(child<len){
if(child+1<len && elem[child]<elem[child+1]){
child++;// Les noeuds de deux enfants sont comparés à la valeur la plus faible
}
if(elem[child]<elem[parent]){
int tmp=elem[parent];
elem[parent]=elem[child];
elem[child]=tmp;
parent=child;
child=parent*2+1;
}else{
break;
}
}
}
🥬Construction de piles
public void creatHeap(int[] arr){
for(int i=0;i<arr.length;i++){
elem[i]=arr[i];
useSize++;
}
for(int parent=(useSize-1-1)/2;parent>=0;parent--){//Indice de tableau de0C'est parti.
shiftDown(parent,useSize);
}
}
La complexité spatiale de la construction du réacteur est O(N), Parce que le tas est un arbre binaire complet , Un arbre binaire plein est aussi un arbre binaire complet , Nous utilisons des arbres binaires (Dans le pire des cas)Pour prouver.
🥬Empiler vers le haut
Il y a une pile. , Nous devons insérer des données à la fin du tas , Et l'ajuster , Pour garder la structure du tas , C'est le réglage vers le haut .
Prenons l'exemple d'un tas de:
Exemple de code:
public void shiftup(int child){
int parent=(child-1)/2;
while(child>0){
if(elem[child]>elem[parent]){
int tmp=elem[parent];
elem[parent]=elem[child];
elem[child]=tmp;
child=parent;
parent=(child-1)/2;
}else{
break;
}
}
}
🥬Opérations courantes du tas
Dans la file d'attente
Ajouter des éléments au tas , Est d'ajouter à la dernière position , Ensuite, en faisant un ajustement vers le haut .
public boolean isFull(){
return elem.length==useSize;
}
public void offer(int val){
if(isFull()){
elem= Arrays.copyOf(elem,2*elem.length);//Expansion de la capacité
}
elem[useSize++]=val;
shiftup(useSize-1);
}
Hors de la file d'attente
Supprimer les éléments du tas , En échange du dernier élément , Et puis réduire la taille du tableau entier d'un , Dernier ajustement vers le bas , L'élément supérieur de la pile est supprimé .
public boolean isEmpty(){
return useSize==0;
}
public int poll(){
if(isEmpty()){
throw new RuntimeException("La file d'attente prioritaire est vide");
}
int tmp=elem[0];
elem[0]=elem[useSize-1];
elem[useSize-1]=tmp;
useSize--;
shiftDown(0,useSize);
return tmp;
}
Obtenir l'élément chef d'équipe
public int peek() {
if (isEmpty()) {
throw new RuntimeException("La file d'attente prioritaire est vide");
}
return elem[0];
}
🥬TopK Questions
Voilà.6Données,S'il te plaît.3Maximum de données. Comment on fait avec les piles ?
Comment résoudre le problème:
1、Si je te le demandeKLes plus grands éléments,Pour construire un petit tas de racines.
2、Si je te le demandeKLes plus petits éléments,Pour construire un grand tas de racines.
3、NoKLes grands éléments.Construire un petit tas,L'élément supérieur de la pile estKLes grands éléments.
4、NoKPetits éléments.Construire un tas de,L'élément supérieur de la pile estKLes grands éléments.
Par exemple,:S'il te plaît.nMaximum de données
Exemple de code:
public static int[] topK(int[] array,int k){
//Créer une taille deKUn petit tas de racines
PriorityQueue<Integer> minHeap=new PriorityQueue<>(k, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
//Traverser les éléments du tableau,AvantkÉléments mis en file d'attente
for(int i=0;i<array.length;i++){
if(minHeap.size()<k){
minHeap.offer(array[i]);
}else{
//Dek+1Début des éléments, Comparer séparément avec les éléments supérieurs
int top=minHeap.peek();
if(array[i]>top){
// Pop - up avant stockage
minHeap.poll();
minHeap.offer(array[i]);
}
}
}
// Placer les éléments du tas dans le tableau
int[] tmp=new int[k];
for(int i=0;i< tmp.length;i++){
int top=minHeap.poll();
tmp[i]=top;
}
return tmp;
}
public static void main(String[] args) {
int[] array={12,8,23,6,35,22};
int[] tmp=topK(array,3);
System.out.println(Arrays.toString(tmp));
}
Résultats:
Tri des tableaux
Encore une fois, si vous voulez trier un tableau de petit à grand , Avec un grand ou un petit tas de racines ?
---->Gros tas de racines
Exemple de code:
public void heapSort(){
int end=useSize-1;
while(end>0){
int tmp=elem[0];
elem[0]=elem[end];
elem[end]=tmp;
shiftDown(0,end);// Supposons qu'il s'agisse d'un grand tas de racines
end--;
}
}
🥬Résumé
C'est ce qu'il y a aujourd'hui,Si vous avez des questions, veuillez laisser un message dans la section commentaires.
边栏推荐
- Fabric. JS 3 APIs to set canvas width and height
- PyTorch中repeat、tile与repeat_interleave的区别
- Fresh, 2022 advanced Android interview must know 100 questions (interview questions + answer analysis)
- Some problems encountered in introducing lvgl into esp32 Arduino
- CDA数据分析——AARRR增长模型的介绍、使用
- K-Means Clustering Visualization in R: Step By Step Guide
- Leetcode209 subarray with the smallest length
- GGPLOT: HOW TO DISPLAY THE LAST VALUE OF EACH LINE AS LABEL
- Enter the top six! Boyun's sales ranking in China's cloud management software market continues to rise
- MSI announced that its motherboard products will cancel all paper accessories
猜你喜欢
YYGH-BUG-04
How to Add P-Values onto Horizontal GGPLOTS
GGPUBR: HOW TO ADD ADJUSTED P-VALUES TO A MULTI-PANEL GGPLOT
H5,为页面添加遮罩层,实现类似于点击右上角在浏览器中打开
刷题---二叉树--2
PyTorch nn.RNN 参数全解析
堆(优先级队列)
Lekao: contents of the provisions on the responsibility of units for fire safety in the fire protection law
多文件程序X32dbg动态调试
自然语言处理系列(二)——使用RNN搭建字符级语言模型
随机推荐
(C语言)3个小代码:1+2+3+···+100=?和判断一个年份是闰年还是平年?和计算圆的周长和面积?
(C language) input a line of characters and count the number of English letters, spaces, numbers and other characters.
Implementation of address book (file version)
Small guide for rapid formation of manipulator (VII): description method of position and posture of manipulator
Dynamic memory (advanced 4)
[C language] Yang Hui triangle, customize the number of lines of the triangle
PyTorch nn. Full analysis of RNN parameters
Differences between nodes and sharding in ES cluster
QT meter custom control
Fresh, 2022 advanced Android interview must know 100 questions (interview questions + answer analysis)
Those logs in MySQL
ES集群中节点与分片的区别
File operation (detailed!)
How to Create a Beautiful Plots in R with Summary Statistics Labels
Gaode map test case
WSL 2 will not be installed yet? It's enough to read this article
YYGH-10-微信支付
【2022 ACTF-wp】
xss-labs-master靶场环境搭建与1-6关解题思路
GGHIGHLIGHT: EASY WAY TO HIGHLIGHT A GGPLOT IN R