You are not logged in.

Zypressen Hügel

Junior Schreiberling

  • "Zypressen Hügel" started this thread

Posts: 244

Date of registration: Dec 22nd 2001

1

Wednesday, May 29th 2002, 8:54am

SortingGUI Aufgabe 5

shit. kann mir jemand bestätigen, dass, wenn man versucht, mehr als ~5000 zufallszahlen von dem GUI sortieren zu lassen, mein rechner mit 1.2GHz und ca.400MB RAM nicht mehr reagiert wegen überlastung???
hab ich den falschen algorithmus ?(
Man kann auch ohne Spass Alkohol haben 8)

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

2

Wednesday, May 29th 2002, 6:27pm

Quoted

Original von Zypressen Hügel
shit. kann mir jemand bestätigen, dass, wenn man versucht, mehr als ~5000 zufallszahlen von dem GUI sortieren zu lassen, mein rechner mit 1.2GHz und ca.400MB RAM nicht mehr reagiert wegen überlastung???
hab ich den falschen algorithmus ?(


Bei mir läuft es ohne Probleme auch mit 6000 Zufallszahlen. (Ich habe einen AMD Duron mit 650MHz 256MB RAM.)
Es sortiert auch wunderbar. Natürlich dauert es etwas länger, aber er kommt zum Ende.

Vielleicht ist es so, dass eine Zahl doppelt vorkommt? tbys Algorithmus kommt dann nicht zum Ende. Er ist wahrscheinlich fehlerhaft.
Versuch mal diesen hier von Shadow: Sort.java. Der tut es auch, wenn ein Eintrag mehr als einmal vorkommt ganz sauber. :) Da hat er saubere Arbeit geleistet.

hth, Michael
tar: Anlegen eines leeren Archivs wird feige verweigert.

RumRT11

Trainee

  • "RumRT11" is male

Posts: 45

Date of registration: Dec 11th 2001

Location: St.-Petersburg

Occupation: Student

3

Thursday, May 30th 2002, 4:21pm

Intel Celeron 266 MHz übertackt auf 300 MHz, 196 MB RAM - hat weniger als 1.5 minuten gebraucht (5000 zuf.Zall.)

(ich habe einen anderen Sort-Algorithmus benutzt)

Zypressen Hügel

Junior Schreiberling

  • "Zypressen Hügel" started this thread

Posts: 244

Date of registration: Dec 22nd 2001

4

Thursday, May 30th 2002, 6:10pm

also stelle ich fest:

- mein rechner ist in ordnung
- der tby-algorithmus ist sch... schon mal nicht so gut und hat mit "Quick"Sort nicht besonders viel am hut

wieso krieg ich es eigentlich zwar ohne probleme hin, mit requestFocus() den focus auf das TextField zu ziehen, nachdem ich zahlen übernehme, aber es gelingt mir einfach nicht, den focus von anfang an, also direkt nach dem programmstart auf das TextField zu setzen (habs direkt nach der instanziierung und direkt nach der aufnahme ins JPanel und direkt nach der aufnahme des JPanel ins ContentPane versucht) ?( ?( ?( (ok, egal, weil kleinigkeit, aber vielleicht weiss ja trotzdem jemand, woran das liegt)
Man kann auch ohne Spass Alkohol haben 8)

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

5

Thursday, May 30th 2002, 6:19pm

Quoted

Original von Zypressen Hügel
[...], den focus von anfang an, also direkt nach dem programmstart auf das TextField zu setzen (habs direkt nach der instanziierung und direkt nach der aufnahme ins JPanel und direkt nach der aufnahme des JPanel ins ContentPane versucht)


Meine Idee:
Nach hauptframe.setVisible(true) den Fokus des TextFields setzen. ( ? )
Ich teste das mal, denn ich bin auch gespannt, wie das geht. :)

So, es geht tatsächlich. :) :D

In den API-Docs steht bei javax.swing.JComponent:

public boolean requestFocusInWindow()
"Requests that this Component get the input focus, if this Component's top-level ancestor is already the focused Window. This component must be displayable, visible, and focusable for the request to be granted."

Also: Diese Methode erst aufrufen, wenn du den HauptFrame -- und damit auch das JTextField -- auf visible gesetzt hast. Dann geht es. :)
tar: Anlegen eines leeren Archivs wird feige verweigert.

Zypressen Hügel

Junior Schreiberling

  • "Zypressen Hügel" started this thread

Posts: 244

Date of registration: Dec 22nd 2001

6

Thursday, May 30th 2002, 11:07pm

ist ja witzig. klappt nämlich trotzdem nicht. naja, war ja nur am rand und wirklich nicht wichtig... aber verstehen tu ichs trotzdem nicht ?( ?( denn requestFocus() arbeitet einwandfrei, wenn ich die requestFocus() im ActionListener anwende...

trotzdem danke :P
Man kann auch ohne Spass Alkohol haben 8)

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

7

Friday, May 31st 2002, 4:20pm

Quoted

Original von Zypressen Hügel
[...] denn requestFocus() arbeitet einwandfrei, wenn ich die requestFocus() im ActionListener anwende...


Ja, bei mir auch. Ich verwende zwar requestFocusInWindow() , doch das ist sicherlich irrelevant. Allerdings wird auch bei mir, wie ich jetzt festgestellt habe, der Fokus (beim Programmstart) manchmal nicht gesetzt. Seltsam ist das schon. Die API-Docu sagt immerhin, dass nicht garantiert werden kann, dass der Eingabe-Fokus gewährt wird. Naja.

Eine andere Sache: Jemand hatte die Idee, eine JProgressBar zur Anzeige des Fortschritts beim Sortieren zu verwenden. Das Problem:
Man muss direkt in den QuickSort-Algorithmus eingreifen, also void sort(Object[], int, int) abändern.
Meine Idee ist hier:
Man nimmt ein Interface zur Aktualisierung einer Component (ob's das schon gibt, weiß ich nicht. Ist auch egal.) und implementiert dieses in der gewünschten Component. Nun übergibt man eine Referenz der Component-Instanz an den Konstruktor einer Klasse Sort. Die Klasse Sort kann jetzt eine bestimmte Methode zum Aktualisieren der Component aufrufen, je nachdem, wieviel schon sortiert ist.

Meine Frage: Wie entscheide ich, wie weit der QuickSort schon ist? Wie kann ich z.B. feststellen, wieviel Prozent schon sortiert sind?

Wie macht man so was "professionell"?
tar: Anlegen eines leeren Archivs wird feige verweigert.

Zypressen Hügel

Junior Schreiberling

  • "Zypressen Hügel" started this thread

Posts: 244

Date of registration: Dec 22nd 2001

8

Sunday, June 2nd 2002, 6:44pm

na, das nenn ich mal eine richtig gute idee, dann könnte ich auch nachvollziehen, ob sich mein prog aufhängt, wenn ich große mengen sortieren lasse oder eben einfach etwas länger braucht.
hat jemand dazu eine idee oder hat jemand den algorithmus so gut verstanden, dass er einen punkt nennen kann, an dem man ablesen kann, wieviel sortiert wurde?
Man kann auch ohne Spass Alkohol haben 8)

tby

Praktikant

Posts: 13

Date of registration: Apr 4th 2002

9

Thursday, June 6th 2002, 6:22pm

Hallo,

bei Aufgabe 4 wollte ich ursprünglich tatsächlich eine QuickSort-Variante mit erlaubten Duplikaten verwenden, habe aber schließlich doch eine andere Variante geschrieben, die für Anfänger aber auch leichter zu verstehen ist als das klassische QuickSort. Die Variante ist nicht fehlerhaft.

Leider scheint niemand von den Beteiligten in diesem Thread darauf gekommen zu sein, daß mein Algorithmus tatsächlich *keine* Einschränkung bedeutet, daß heißt, er funktioniert mit einem Trick (am Array) auch mit Duplikaten!
Schade ...

@Zypressenhügel:
Jemand, der das Werk eines anderen nicht versteht oder nicht genau genug studiert, sollte sich in seinen Äußerungen über die Qualität des Werkes vornehm zurückhalten ...

@migu:
Deine manchmal spitzen Formulierungen hinterlassen einen schwachen Eindruck von Dir. Ist das beabsichtigt?

Freundliche Grüße,

Thomas Bessey

Zypressen Hügel

Junior Schreiberling

  • "Zypressen Hügel" started this thread

Posts: 244

Date of registration: Dec 22nd 2001

10

Thursday, June 6th 2002, 8:40pm

@ tby

Quoted

Jemand, der das Werk eines anderen nicht versteht oder nicht genau genug studiert, sollte sich in seinen Äußerungen über die Qualität des Werkes vornehm zurückhalten ...

hab ich doch getan... ?( dachte ich jedenfalls. ich habe nur festgestellt, dass der algorithmus, so wie ICH ihn programmiert habe, eben die macke hat, dass im blinden vertrauen auf den algorithmus eine übergabe von gleichen objekten im array dazu führt, dass der algorithmus abschmiert bzw. nach über einen halben stunde wartezeit kein ergebnis bringt und deshalb nun einmal mit QUICKsort nicht viel zu tun hat. es sollte nicht beleidigend sein.
Man kann auch ohne Spass Alkohol haben 8)

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

11

Thursday, June 6th 2002, 8:55pm

@tby:

Das mit dem Trick am array ist mir nicht klar gewesen.
Wie geht denn der Trick genau?

Was meinst du denn mit "manchmal spitzen Formulierungen"?
Das versteh ich nicht ganz. Ich sage bloß gerne genau, was ich denke, auch wenn es dann u.U. falsch sein kann. Ich lasse mich gerne korrigieren. :)

Nichts für ungut,
Michael
tar: Anlegen eines leeren Archivs wird feige verweigert.

MAX

Senior Schreiberling

  • "MAX" is male

Posts: 822

Date of registration: Dec 11th 2001

Location: Hannover

12

Thursday, June 6th 2002, 9:23pm

Der Trick würde mich auch sehr interessieren!!!

mfg
MAX

tby

Praktikant

Posts: 13

Date of registration: Apr 4th 2002

13

Friday, June 7th 2002, 10:03am

Hallo,

der Trick macht das Verfahren nicht gerade effizient (es gibt ja schließlich auch geeignetere Varianten von QuickSort), ist aber dafür sehr naheliegend:

Die Elemente des Arrays werden durch eine Numerierung eindeutig, selbst, wenn Duplikate dabei sind!
Das ist die Idee.

Ich habe Sorting.java entsprechend erweitert:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[B]static
private
class ArrayElement
implements Comparable
{
    Comparable element;
    int index;

    ArrayElement(
        Comparable element,
        int index
    )
    {
        this.element = element;
        this.index = index;
    }

    public
    int
    compareTo(
        Object o
    )
    {
        ArrayElement ae = (ArrayElement) o;
        int r = element.compareTo(ae.element);

        if (r == 0)
        {
            r = (new Integer(index)).compareTo(new Integer(ae.index));
        }
        return (r);
    }
}[/B]

static
public
void
sort(
    Object[] objects
)
{
    if (objects == null)
    {
        throw (new IllegalArgumentException());
    }
    [B]Object[] array = new Object[objects.length];[/B]
    for (int i = 0; i < objects.length; i++)
    {
        if (!(objects[i] instanceof Comparable))
        {
            throw (new IllegalArgumentException());
        }
        [B]array[i] = new ArrayElement((Comparable) objects[i], i);[/B]
    }
    sort([B]array[/B], 0, [B]array[/B].length - 1);
    [B]for (int i = 0; i < objects.length; i++)
    {
        objects[i] = ((ArrayElement) array[i]).element;
    }[/B]
}


Das Array array ist notwendig (anstelle einfach nur objects zu verwenden), da ein Array, auch wenn es zum Typ Object[] generalisiert wird, auf den Datentyp bei seiner Erzeugung beschränkt ist. Also darf man in das Array aus main nur noch Objekte vom Typ String speichern.

Freundliche Grüße,

Thomas Bessey

MAX

Senior Schreiberling

  • "MAX" is male

Posts: 822

Date of registration: Dec 11th 2001

Location: Hannover

14

Friday, June 7th 2002, 12:19pm

Das nenne ich Service!!!

Danke! Danke! Danke!
mfg
MAX