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

边栏推荐
- Jenkins用户权限管理
- Take you ten days to easily finish the finale of go micro services (distributed transactions)
- Data analysis - Matplotlib sample code
- (C language) octal conversion decimal
- Leetcode739 每日温度
- H5,为页面添加遮罩层,实现类似于点击右上角在浏览器中打开
- (C语言)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- QT meter custom control
- FastDateFormat为什么线程安全
- [QT] Qt development environment installation (QT version 5.14.2 | QT download | QT installation)
猜你喜欢

(C语言)3个小代码:1+2+3+···+100=?和判断一个年份是闰年还是平年?和计算圆的周长和面积?

Thesis translation: 2022_ PACDNN: A phase-aware composite deep neural network for speech enhancement

mysql数据库基础

XSS labs master shooting range environment construction and 1-6 problem solving ideas

Jenkins user rights management

How to Create a Beautiful Plots in R with Summary Statistics Labels

PyTorch搭建LSTM实现服装分类(FashionMNIST)

HOW TO CREATE A BEAUTIFUL INTERACTIVE HEATMAP IN R

Small guide for rapid formation of manipulator (VII): description method of position and posture of manipulator

Power Spectral Density Estimates Using FFT---MATLAB
随机推荐
PyTorch nn. Full analysis of RNN parameters
【工控老马】西门子PLC Siemens PLC TCP协议详解
SVO2系列之深度濾波DepthFilter
The blink code based on Arduino and esp8266 runs successfully (including error analysis)
How to Add P-Values onto Horizontal GGPLOTS
Find the factorial of a positive integer within 16, that is, the class of n (0= < n < =16). Enter 1111 to exit.
堆(优先级队列)
小程序链接生成
Larvel modify table fields
5g era, learning audio and video development, a super hot audio and video advanced development and learning classic
From scratch, develop a web office suite (3): mouse events
HOW TO ADD P-VALUES TO GGPLOT FACETS
How to Easily Create Barplots with Error Bars in R
Seriation in R: How to Optimally Order Objects in a Data Matrice
PyTorch中repeat、tile与repeat_interleave的区别
YYGH-BUG-04
数据分析 - matplotlib示例代码
Those logs in MySQL
测试左移和右移
uniapp uni-list-item @click,uniapp uni-list-item带参数跳转