`
freesky110
  • 浏览: 12609 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

短网址算法实现

阅读更多
短网址或微小的网址是用来表示长URL的URL。 例如,http://tinyurl.com/y9nyxza
将重定向到http://www.iteye.com/topic/577820


使用短网址的主要优点:

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。


实现自己的短网址需要如下步骤:

1.定义您自己的网址映射算法。
2.有一个数据库来存储映射的网址。
3.从数据库的短网址的映射找到原始的URL

我不知道别人是如何创建URL映射算法,但在这里,我将告诉你们,我的简单而快速的短网址实现:

该系统使用6个短码字符来表示任何长度的网址。 有效的字符代码是ASCII 'A'到'Z'和'0'的'5',其中每个字符包含2 ^ 5(32)状态。  6短码字符可用于绘制32 ^ 6(1073741824)的网址

首先,你需要一个数据库表来存储和检索你映射的网址。 


CREATE TABLE mappedURL (的CREATE TABLE mappedURL(
shortCode char(6) not null,
lognURL  text not null,
PRIMARY KEY  shortCodeInd (shortCode),
);

其次,你需要定义一个算法将长的URL映射到短的URL。 以下是建议的算法:


loop1: while true loop1:
  calculate md5 of the URL
  loop2: from 1st 4 bytes to 4th 4 bytes of md5 result loop2:
    cast the 4 bytes to an integer
    loop3: for shortCodeChar[0] to shortCodeChar[5]
      use 1st 5 bits of the integer to find the value in codeMap
      remove 5 bits from the integer
    end loop3
    save shortCodeChar as shortCode
    if shorCode does not exist in database
      insert the short code and original URL into database
      break loop1:
    else
      retrieve the stored URL from database
      if original URL equals to URL stored in database
        break loop1:
      end if
    end if
  end loop2
  insert '-'
end loop1
return shortCode

Note: codeMap contains value of valid characters from 'a' to 'z' (index 0 to 25) and '0'-'5' (index 26 to 31).

第三,你需要创建一个网页,从数据库的短网址的映射找到原始的URL,并重定向之。

分享到:
评论
8 楼 zhanghaocool 2010-01-25  
freesky110 写道

使用短网址的主要优点:
1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。


便于记忆不赞同,只是短了。比起来一长串有规律的字符串,它更不容易记忆。
域名申请短点,它就更短了。
7 楼 JustDoNow 2010-01-25  
目前国内的新浪微博(类twitter)就是用的短网址,不过你在写微博的时候是按长的字符计算字数,发表之后才会换算成短的url,感觉没起到缩短的作用,就是别人看的时候好看一些。
感觉md5算出来的还是长吧,短网址一般固定域名后面就是用5个字符区别网址
6 楼 renzhen 2010-01-25  
网上应该有开源版本的短地址实现,可以参考吧,随即映射偷懒一下可以直接使用MD5或者sha吧,数据库可以使用key-value型,性能和未来的可扩展型可能会好些。
5 楼 prowl 2010-01-25  
urlrewriter
4 楼 chinalu 2010-01-25  
lz_cleaner 写道
引用

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。

1、便于记忆么?我倒不觉得,除非网址特别的长,再说了有多少人会专门记忆那么长的网址呢?
2、我觉得这个东西,也就是用于网址的压缩(数据压缩)有用处。

的确不是为了便于记忆

短地址的目的:像twitter之类的有字符限制,包括短信,
还有我看到过一本纸制的技术数,也写了短地址,方便读者把地址敲到地址栏上
3 楼 lz_cleaner 2010-01-25  
引用

1.便于记忆,而不是记50个或多个字符的URL
2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。

1、便于记忆么?我倒不觉得,除非网址特别的长,再说了有多少人会专门记忆那么长的网址呢?
2、我觉得这个东西,也就是用于网址的压缩(数据压缩)有用处。
2 楼 eshan022 2010-01-25  
直接地址重写不行吗?
1 楼 Bernard 2010-01-23  
<?php
$num = 'zzzzzz';
echo pow(36, 6); // 2176782336
echo base_convert($num, 36, 10); // 2176782335
?>


Long.toString(2176782335L, 36); // zzzzzz


你甚至可以定义到62进制,0-9a-zA-Z。
够用了吧……

相关推荐

    国密算法C代码实现

    总结来说,这个压缩包提供了一套基于C语言实现的国密SM2算法的完整框架,包括算法实现、测试用例、库文件以及项目配置。开发者可以通过分析这些代码,理解SM2算法的实现细节,并在自己的项目中应用或扩展这一功能。...

    操作系统算法实现(银行家算法 进程调度算法 页面置换算法)

    在操作系统的设计与实现中,有三个重要的算法:银行家算法、进程调度算法和页面置换算法。这些算法对于系统的性能和稳定性至关重要。 首先,让我们深入探讨银行家算法。这个算法主要用于预防操作系统的死锁问题。...

    Fold算法实现最短路径

    《Fold算法实现最短路径详解》 在计算机科学领域,寻找图中节点之间的最短路径是一个常见的问题,尤其是在网络分析、路由规划、交通系统优化等领域。Floyd算法,也称为Floyd-Warshall算法,是一种解决此类问题的...

    C语言编程模拟实现调度算法

    这种算法实现简单,但可能导致较长的平均等待时间,特别是当有长进程和短进程交替出现时。在C语言中,可以使用队列数据结构来模拟这种算法,将进程按到达时间排序并逐个执行。 **短进程优先(SJF)调度算法** SJF...

    DES加密算法(c语言实现)

    总结来说,DES加密算法是一种重要的对称加密技术,虽然因为其相对较短的密钥长度(56位)而逐渐被更安全的算法如AES所取代,但它在密码学教育和理解加密原理方面仍具有重要价值。C语言实现的DES算法源码可以帮助我们...

    哈夫曼编码算法实现

    哈夫曼编码算法实现 哈夫曼编码是一种变长编码技术,用于压缩数据,提高信道的利用率,缩短信息传输的时间,降低传输成本。哈夫曼编码的原理是根据字符出现的频率,建立哈夫曼树,然后对各个字符进行哈夫曼编码。 ...

    56丨算法实战(五):如何用学过的数据结构和算法实现一个短网址系统?1

    在实现短网址系统时,主要涉及数据结构和算法的应用。这里我们将探讨如何使用学过的数据结构和算法来创建一个短网址系统。 首先,我们需要一个ID生成器来为每个长网址分配唯一的标识。一种常见的方法是在第54节中...

    VIBE算法MATLAB实现

    MATLAB是实现这类算法的理想平台,因为它提供了丰富的数学工具和可视化功能。 在MATLAB实现的VIBE算法中,`vibe_tom.m` 文件可能是主程序或核心函数,用于执行VIBE的核心步骤。以下是对VIBE算法的详细解释: 1. **...

    调度算法 c语言实现

    SJF 算法是一种基于短作业优先的调度算法,该算法认为,最短的作业应该首先被执行。该算法的主要思想是:每次选择当前可执行的最短作业,并为其分配 CPU 时间直到完成或被中断。 在上述代码中,SJF 算法的实现主要...

    短网址服务两种不同算法JAVA实现

    在IT行业中,短网址服务是一种常见的工具,它能够将长的URL缩短,便于分享和记忆。这个主题涉及的“短网址服务两种不同算法JAVA实现”是关于如何在Java编程环境中构建这种服务的关键技术。通常,短网址服务的核心...

    多级反馈队列调度算法实现

    多级反馈队列调度算法(Multilevel Feedback Queue Scheduling,MLFQ)是一种常见的操作系统进程调度策略,它结合了时间片轮转和优先级调度的优点,以优化系统的响应时间和周转时间。在深入探讨MLFQ的实现之前,我们...

    电梯算法的实现

    通过这样的模拟,我们可以深入理解电梯算法的工作原理,并且可以优化算法,比如引入优先级队列来改进服务策略,或者使用其他调度算法进行对比,如短寻道时间优先(SSTF)或循环扫描算法(C-SCAN)。 在提供的压缩包...

    DES算法C++实现

    DES(Data Encryption ...不过,需要注意的是,尽管DES算法在历史上有其重要地位,但由于其相对较短的密钥长度,现在已被视为不够安全,更现代的加密标准如AES(Advanced Encryption Standard)提供了更高的安全性。

    C语言实现Dijkstra算法

    但要注意,这个算法不适用于负权边,因为可能会漏掉更短的路径。 在压缩包中的"Dijkstra算法"可能包含了实现这个算法的C语言代码,包括邻接矩阵的定义、优先队列的实现、节点状态的跟踪以及路径打印等功能。通过...

    Dijkstra算法实现C++

    通过阅读和理解代码,你可以更深入地学习Dijkstra算法的实现细节,包括如何组织数据结构,如何实现优先队列,以及如何将算法整合进一个用户友好的程序中。同时,也可以尝试修改和优化代码,以适应不同的需求和场景。

    操作系统实验报告 C++实现进程调度算法,短进程优先SJF与先来先服务FCFS算法

    操作系统实验报告 C++实现进程调度算法,短进程优先SJF与先来先服务FCFS算法 本实验报告的主要目的是通过C++语言实现短进程优先SJF和先来先服务FCFS两种进程调度算法,并比较它们的性能。 第一部分:实验目的 本...

    基于C++实现SJF短优先算法+HRRN高响应比优先调度算法+多级反馈队列调度算法源码.zip

    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业...基于C++实现SJF短优先算法+HRRN高响应比优先调度算法+多级反馈队列调度算法源码.zip

    进程调度算法的模拟实现

    进程调度算法的模拟实现 进程调度是操作系统中的一种机制,旨在将系统资源分配给不同的进程以提高系统的效率和性能。进程调度算法是操作系统中的一种核心算法,它决定了进程的执行顺序和时间。在本文中,我们将对五...

    Java模拟操作系统实验之四种进程调度算法实现(FCFS,SJF,RR,HRN)

    本文将深入探讨Java环境下实现的四种进程调度算法:先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)以及高响应比优先(HRN)。这些算法在多任务环境中用于决定哪个进程应该获得CPU的执行权,以达到资源分配的公平...

    哈夫曼编码算法与分析(java实现)

    哈夫曼编码算法与分析(java实现) 哈夫曼编码是一种广泛用于数据文件压缩的十分有效的编码方法,它通过对文件中各个字符出现的频率进行分析,生成各个字符的哈夫曼编码方案。哈夫曼编码的主要思想是通过构造一棵...

Global site tag (gtag.js) - Google Analytics