Wie wird eine Ganzzahl für die Gittererstellung in zwei Teile zerlegt?

8

Gegeben eine ganze Zahl N Ich möchte zwei ganze Zahlen A und B finden, die A x B ≥ N mit den folgenden Bedingungen erfüllen:

  1. Der Unterschied zwischen A × B und N ist so gering wie möglich.
  2. Der Unterschied zwischen A und B ist so gering wie möglich (um sich einem Quadrat zu nähern).

Beispiel: 23. Mögliche Lösungen 3 × 8, 6 × 4, 5 × 5. 6 × 4 ist das Beste, da es nur einen leeren Platz im Gitter übrig lässt und "weniger" rechteckig als 3 × 8 ist.

Ein anderes Beispiel: 21. Lösungen 3 × 7 und 4 × 6. 3 × 7 ist die gewünschte.

Eine Brute-Force-Lösung ist einfach. Ich würde gerne sehen, ob eine clevere Lösung möglich ist.

    
Eduardo Mauro 25.08.2010, 20:45
quelle

3 Antworten

3

Einfach.

Im Pseudocode

%Vor%

und es wird immer beendet, der Abstand zwischen a und b höchstens nur 1.

Es wird viel schwieriger sein, wenn Sie die zweite Einschränkung entspannen, aber das ist eine andere Frage.

Edit: Da es scheint, dass die erste Bedingung wichtiger ist, müssen Sie das Problem angehen ein bisschen anders. Sie müssen eine Methode angeben, um die Schlechtigkeit zu messen, die nicht quadratisch genug ist = 2. Bedingung, weil sogar Primzahlen als 1*number faktorisiert werden können und wir die erste Bedingung erfüllen. Angenommen, wir haben eine Schlechtenfunktion (sagen wir a >= b && a <= 2 * b ), dann faktorisieren N und versuchen verschiedene Kombinationen, um die beste zu finden. Wenn es nicht gut genug ist, versuchen Sie mit N+1 und so weiter.

Edit2: Nachdem ich ein bisschen mehr nachgedacht habe, komme ich mit dieser Lösung in Python:

%Vor%

welche Ausgaben

%Vor%     
phadej 25.08.2010, 20:54
quelle
1

Ich denke, das könnte funktionieren (Ihre Bedingungen sind etwas mehrdeutig). diese Lösung ist etwas ähnlich zu anderen, im Grunde produziert rechteckige Matrix, die fast quadratisch ist. Möglicherweise müssen Sie beweisen, dass A + 2 nicht optimal ist

%Vor%

Dies ist die Lösung, wenn die erste Bedingung dominant ist (und die zweite Bedingung nicht verwendet wird)

%Vor%

Andere Bedingungen variieren zwischen

    
Anycorn 25.08.2010 21:09
quelle
0
%Vor%     
nlucaroni 25.08.2010 20:53
quelle

Tags und Links