溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

由[交換兩個(gè)變量的值問(wèn)題]理解程序的時(shí)空復(fù)雜度

發(fā)布時(shí)間:2020-07-17 08:55:52 來(lái)源:網(wǎng)絡(luò) 閱讀:765 作者:JunStar 欄目:web開(kāi)發(fā)

由一個(gè)編程經(jīng)典問(wèn)題,交換兩個(gè)變量的值入手,理解程序的時(shí)空復(fù)雜度(以下均使用PHP代碼演示問(wèn)題的解決方法)
解決問(wèn)題的方法一:
    1.方法文字描述:使用一個(gè)中間變量temp,實(shí)現(xiàn)兩個(gè)變量值的互換
    2.實(shí)現(xiàn)的具體代碼:

<?php 
//聲明兩個(gè)變量$a,$b 
$a = $_GET['a'];  
$b = $_GET['b']; 
//打印沒(méi)有互換前,$a和$b
var_dump("未替換前:a={$a} and b={$b}");
//使用中間變量$temp實(shí)現(xiàn)$a和$b互換
$temp = $a;
$a = $b;
$b = $temp;
var_dump("使用temp中間變量替換后:a={$a} and b={$b}");
?>

     3.此時(shí)時(shí)空復(fù)雜度
        時(shí)間復(fù)雜度即程序運(yùn)算次數(shù),3次賦值運(yùn)算
        空間復(fù)雜度即占用內(nèi)存大小,除了原本的$a和$b兩個(gè)變量,增加了$temp中間變量,所以空間復(fù)雜度為3(具體是3個(gè)字符串)

為了降低內(nèi)存使用量,避免使用中間變量的實(shí)現(xiàn)方式,使用異或運(yùn)算符實(shí)現(xiàn)
解決問(wèn)題的方法二:
    1.方法文字描述:使用異或運(yùn)算符
    2.實(shí)現(xiàn)的具體代碼:

<?php 
//聲明兩個(gè)變量$a,$b 
$a = $_GET['a'];  
$b = $_GET['b']; 
//打印沒(méi)有互換前,$a和$b
var_dump("未替換前:a={$a} and b={$b}");
//使用異或運(yùn)算實(shí)現(xiàn)$a和$b互換
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;
var_dump("使用異或運(yùn)算符替換后:a={$a} and b={$b}");
?>

    3.此時(shí)的時(shí)空復(fù)雜度
        時(shí)間,3次賦值運(yùn)算,3次異或運(yùn)算,6次
        空間,只使用原本的2個(gè)變量,$a和$b,空間復(fù)雜度為2
注意:在PHP中得異或操作,前面的字符串的長(zhǎng)度要大于等于后面的字符串,因?yàn)椋热?/span>'abc' ^ 'defgh',PHP就只會(huì)執(zhí)行'abc' ^ 'def'。gh會(huì)被省略


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI