当前位置:网站首页>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.

边栏推荐
- 【工控老马】西门子PLC Siemens PLC TCP协议详解
- (C language) octal conversion decimal
- 初始JDBC 编程
- [C language] convert decimal numbers to binary numbers
- Leetcode739 每日温度
- Larvel modify table fields
- Thesis translation: 2022_ PACDNN: A phase-aware composite deep neural network for speech enhancement
- 自然语言处理系列(三)——LSTM
- GGPlot Examples Best Reference
- Leetcode14 最长公共前缀
猜你喜欢

堆(优先级队列)

From scratch, develop a web office suite (3): mouse events

Applet link generation

Lekao: contents of the provisions on the responsibility of units for fire safety in the fire protection law

Thesis translation: 2022_ PACDNN: A phase-aware composite deep neural network for speech enhancement
![[visual studio 2019] create MFC desktop program (install MFC development components | create MFC application | edit MFC application window | add click event for button | Modify button text | open appl](/img/6a/111da81436659c7502648907ec1367.jpg)
[visual studio 2019] create MFC desktop program (install MFC development components | create MFC application | edit MFC application window | add click event for button | Modify button text | open appl
![[geek challenge 2019] upload](/img/04/731323142161a4994c14fedae38b81.jpg)
[geek challenge 2019] upload

小程序链接生成

MSI announced that its motherboard products will cancel all paper accessories

xss-labs-master靶场环境搭建与1-6关解题思路
随机推荐
K-Means Clustering Visualization in R: Step By Step Guide
Jenkins voucher management
堆(优先级队列)
FastDateFormat为什么线程安全
YYGH-10-微信支付
GGPUBR: HOW TO ADD ADJUSTED P-VALUES TO A MULTI-PANEL GGPLOT
Log4j2
YYGH-9-预约下单
Easyexcel and Lombok annotations and commonly used swagger annotations
(C语言)八进制转换十进制
Fabric. JS 3 APIs to set canvas width and height
Log4j2
SSH automatically disconnects (pretends to be dead) after a period of no operation
YYGH-BUG-04
Fresh, 2022 advanced Android interview must know 100 questions (interview questions + answer analysis)
PyTorch中repeat、tile与repeat_interleave的区别
自然语言处理系列(一)——RNN基础
(C语言)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
conda常用命令汇总
[geek challenge 2019] upload