PDA

View Full Version : آموزش: آموزش الگوریتم ساده سایت های کوتاه کننده لینک



aalmair
دوشنبه 22 خرداد 1396, 11:20 صبح
سایت های کوتاه کننده ابتدا لینک مورد نظر را در بانک اطلاعاتی ثبت می کنند و برای هر لینک یه id منحصر به فرد وجود دارد
به طور مثال وقتی لینکی را ثبت می کنیم عدد 10024445646 آی دی لینک مورد نظر است
اما با توجه به اینکه هر چه تعداد لینک ها بیشتر باشه عدد مورد نظر نیز بزرگتر خواهد بود (برخی از سایت ها از این روش استفاده می کنند)
راه حل : اگر در مورد مبناهای اعداد اطلاعاتی داشته باشید می دانید که وقتی یک عدد دهدهی را به هگزادسیمال تبدیل می کنیم طول رشته کمتر می شود مثال : هگزادسیمال عدد بالا 25580E6CE
اما هدف ما تبدیل دهدهی به هگزادسیمال نیست

تبدیل دهدهی به مبنای بزرگتر 62


class number_shorter
{
private $table='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP QRSTUVWXYZ0123456789';


function __construct()
{

}
function id2str($int_str=""){




$table=$this->table;
$size_int=strlen($int_str) ;
$t=0;
while($t<$size_int&&$int_str[$t]==" ")
{
$t++;
}
$size_int-=$t;
$int_str=substr($int_str,$t);


if(!is_numeric($int_str))
{
return 0;
}else{
for($j=0;$j<$size_int;$j++)
{
if($int_str[$j]==".")
{
return 0;
}
}
}










$size_table=strlen($table);
$rev=array();
$res="";

while($int_str>=1)
{

$rev []= bcmod($int_str,$size_table);
$int_str = bcdiv ($int_str,$size_table);

}
for($i=count($rev)-1;$i>=0;$i--)
{

$res.=$table[$rev[$i]];


}
return($res);

}
function str2id($str=""){

$table=$this->table;
$size_str=strlen($str);
$size_table=strlen($table);

$rev=array();
$res="0";


for($j=0;$j<$size_str;$j++)
{

$is_exist=0;

for($i=0;$i<$size_table;$i++)
{

if($str[$j]==$table[$i])
{
$is_exist = 1;
$res = bcmul($size_table,$res)+$i;
break;
}
}
if(!$is_exist)
{
return 0;
}



}

return ($res);


}

}





$number_shorter = new number_shorter();

var_dump($number_shorter->id2str(10024445646 )); // output k6zIpm






خروجی عدد بالا 11 رقمی k6zIpm