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

ساخت وبلاگ

سایت های کوتاه کننده ابتدا لینک مورد نظر را در بانک اطلاعاتی ثبت می کنند و برای هر لینک یه 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

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 139 تاريخ : دوشنبه 22 خرداد 1396 ساعت: 17:21