2011-02-13 6 views
0
$haystack = array('T', 'h', 'i', 's', 'i', 's', 's', 'r', 'i', 'k', 'a', 'n', 't', 'h'); 
$needle = array('s', 'r', 'i', 'k', 'a', 'n', 't', 'h'); 
$array = array(); 
$k = -1; 

$m = count($needle); 
$n = count($haystack); 
//****************1st type******************** 
for ($i = 0; $i < $m; $i++) { 
    for ($j = 0; $j < $n; $j++) { 
     if ($needle[$i] == $haystack[$j]) { 
      $array[++$k] = $needle[$i]; 
      //echo $needle[$i]."<br/>"; 
      break; 
     } 
    } 
} 
//********************2nd type************************** 
$found_array = array(); 
$j = 0; 
for ($i = 0; $i < $n; $i++) { 
    if ($needle[$j] == $haystack[$i]) { 
     $found_array[] = $needle[$j]; 
     $j++; 
    } 
} 

echo '<pre>'; 
print_r($array); 
echo '</pre>'; 

echo '<pre>'; 
print_r($found_array); 
echo '</pre>'; 

Comme vous pouvez le voir, je compare 2 chaînes ... en utilisant 2 types différents. quelle est la complexité de chacun d'entre eux? Ma réponse est O (NM) pour les deux..Am je correcte ???complexité de comparer deux chaînes

+5

Veuillez ne pas marquer [C#] et [java] s'il n'y a pas de code C# ou Java. – BoltClock

+3

Pourquoi utilisez-vous des tableaux? – netcoder

+0

et pourquoi faites-vous cela en php? –

Répondre

5

le premier est O (NM) parce que vous avez les deux boucles imbriquées.

La ligne inférieure est O (N) car vous ne faites que traverser le réseau d'aiguilles.

+0

Dans le second cas, je traverse par haystack (n fois) .. et en comparant l'aiguille (m fois) ... – user614784

+1

en fait, vous n'êtes pas. vous comparez N fois. Vous en avez seulement une pour la boucle et la comparaison est la complexité de O (1). À moins que votre code ne soit erroné, c'est la complexité. –

+0

Oui .. vous avez raison .... parfois, je manque des choses mineures .... merci – user614784

Questions connexes