Datenstruktur_Probleme im Zusammenhang mit der Algorithmusimplementierungssequenztabelle_10

1. Problembeschreibung:

Angenommen, n (n>1) ganze Zahlen werden in einem eindimensionalen Array R gespeichert. Entwerfen Sie einen Algorithmus, der sowohl zeitlich als auch räumlich möglichst effizient ist. Verschieben Sie die in R gespeicherte Sequenz kreisförmig um p (0<p<n) Positionen nach links, d. h. transformieren Sie die Daten in R von (X0, X1,..., Xn-1) nach (Xp, Xp+1). ,... ,Xn-1,X0,X1,...,Xp-1). Erfordern:

  • Die grundlegenden Designideen des Algorithmus werden angegeben.
  • Je nach Entwurfsidee wird der Algorithmus in der Sprache C, C++ oder Java beschrieben und zu wichtigen Punkten kommentiert.
  • Beschreiben Sie die zeitliche und räumliche Komplexität des von Ihnen entworfenen Algorithmus.

2. Algorithmisches Denken:

Das Problem kann als Konvertierung des Arrays ab in das Array ba angesehen werden (a stellt die ersten p Elemente des Arrays dar, b stellt die verbleibenden n-p Elemente im Array dar). Zuerst wird a invertiert, um a zu erhalten< a i=1>-1b, und dann b umkehren, um a-1b< a i=5>-1 und schließlich das gesamte a-1b -1 wird invertiert, um (a-1b zu erhalten -1 = ba. Nehmen Sie an, dass die Reverse-Funktion die Operation zum Invertieren des Arrays ausführt und der Vorgang des Verschiebens von abcdefgh 3 (p=3) Positionen kreisförmig nach links wie folgt abläuft:-1)

  • Reverae(0,p-1) erhält cbadefgh;
  • Reverae(p,n-1)getcbahgfed;
  • Reverae(0,n-1) erhält defghabc;

3. Algorithmuscode:

void Reverse(int R[],int from,int to)
{
    
    
	int i,temp;
	for(i = 0;i < (to - from + 1) / 2;i++)
	{
    
    
		temp = R[from + i];
		R[from + i] = R[to - i];
		R[to - i] = temp;
	}
}
void Converse(int R[],int n,int p)
{
    
    
	Reverse(R,0,p-1);
	Reverse(R,p,n-1);
	Reverse(R,0,n-1);
}

4. Komplexität des Algorithmus:

Die zeitliche Komplexität der drei Umkehrfunktionen beträgt O(p/2), O(n-p) bzw. O(n/2), sodass die zeitliche Komplexität des entworfenen Algorithmus O(n) und die räumliche Komplexität O( 1) beträgt ).

おすすめ

転載: blog.csdn.net/qq_56866000/article/details/131959027