23. oktober 2001 - 14:58Der er
2 kommentarer og 2 løsninger
Proritetskø implementeret som heap
Vi har brug for en source-kode af en prioritestkø som er implementeret som en heap, der arbejder på et array. Der skal kunne sættes elementer ind og også udtages elementer med højeste prioritet.
Er der nogen der ligger inde med dette? ... eller evt. ved hvor vi kan finde noget om emnet?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
public class PriorityQueue { private class PriorityQueueElement { public final int priority; public final Object object; public PriorityQueueElement(int p, Object o) { this.priority = p; this.object = o; }
}
private PriorityQueueElement[] elements; private int size=0; /** Creates new PriorityQueue */ public PriorityQueue(int size) { // Waste the zero element, its a heap. elements = new PriorityQueueElement[size+1]; }
public boolean isEmpty() { // First (zero) element is unused in heap. return size==0; } public boolean isFull() { return size==elements.length-1; }
public int getSize() { return size; }
public int topPriority() throws PriorityQueueEmptyException{ if (isEmpty()) throw new PriorityQueueEmptyException(\"Queue is empty\"); return elements[1].priority; }
public Object dequeue() throws PriorityQueueEmptyException { if (isEmpty()) throw new PriorityQueueEmptyException(\"Queue is empty\");
PriorityQueueElement result = elements[1]; // Swap with the last one, remove the last and reheap swap(1, size); elements[size] = null; size--; if (!isEmpty()) reheap(); return result.object; }
public void enqueue(int priority, Object element ) throws PriorityQueueFullException { if (isFull()) throw new PriorityQueueFullException(\"Unable to add \" + element); elements[++size] = new PriorityQueueElement(priority, element); reheap(); }
logical >> den der reheap() funktion er da et gevaldigt spild af tid.
public class PriorityQueue { private class PriorityQueueElement { public final int priority; public final Object object; public PriorityQueueElement(int p, Object o) { this.priority = p; this.object = o; } }
private PriorityQueueElement[] elements; private int size=0;
public PriorityQueue(int size) { // Creates new PriorityQueue // Waste the zero element, its a heap. elements = new PriorityQueueElement[size+1]; }
public boolean isEmpty() { // First (zero) element is unused in heap. return size==0; } public boolean isFull() { return size==elements.length-1; }
public int getSize() { return size; }
public int topPriority() throws PriorityQueueEmptyException{ if (isEmpty()) throw new PriorityQueueEmptyException(\"Queue is empty\"); return elements[1].priority; }
public Object dequeue() throws PriorityQueueEmptyException { if (isEmpty()) throw new PriorityQueueEmptyException(\"Queue is empty\");
PriorityQueueElement result = elements[1]; // Swap with the last one, remove the last and reheap swap(1, size); size--; heapSink(1); return result.object; }
public void enqueue(int priority, Object element ) throws PriorityQueueFullException { if (isFull()) throw new PriorityQueueFullException(\"Unable to add \" + element); elements[++size] = new PriorityQueueElement(priority, element); heapBubble(size); }
private void swap(int idx1, int idx2) { // brug elements[0] til swap elements[0] = elements[idx1]; elements[idx1] = elements[idx2]; elements[idx2] = elements[0]; }
private void heapSink(int hole) { // sink from front var limit = size /2; while ( hole <= limit && heapStep( hole ) { hole *= 2; } }
private void heapBubble(int hole) { // rise from bottom do { hole /= 2; } while ( hole > 0 && heapStep( hole ); }
JakobA>> Jeg ved det. Det var en som blev lavet en gang for at illustrere muligheden for at bruge rekursion til heap. Jeg har aldrig sagt den var optimal :-)
Men det er lidt kedeligt at lave folks lektier her på stedet :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.