设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
呵呵,今天咋不见电脑高手呢?
返回列表
发新帖
呵呵,今天咋不见电脑高手呢?
[复制链接]
11
|
0
|
2005-8-12 08:04:47
|
显示全部楼层
|
阅读模式
winrar的rar文件和winzip的zip文件压缩算法基本相同zip 的压缩原理与实现 作者: NCS 时间: 2005-01-05 文档类型: 转载 来自: 蓝色理想浏览统计: total: 563 year: 563 quarter: 329 month: 141 week: 23 today: 5第 1 页 zip 的压缩原理与实现第 2 页 编码式压缩的要求及方法第 3 页 霍夫曼算法第 4 页 lz77 算法压缩
无损数据压缩是一件奇妙的事情,想一想,一串任意的数据能够根据一定的规则转换成只有原来 1/2 - 1/5 长度的数据,并且能够按照相应的规则还原到原来的样子,听起来真是很酷。半年前,苦熬过初学 vc 时那段艰难的学习曲线的我,对 MFC、SDK 开始失望和不满,这些虽然不算易学,但和 DHTML 没有实质上的区别,都是调用微软提供的各种各样的函数,不需要你自己去创建一个窗口,多线程编程时,也不需要你自己去分配 CPU 时间。我也做过驱动,同样,有DDK(微软驱动开发包),当然,也有 DDK 的“参考手册”,连一个最简单的数据结构都不需要你自己做,一切都是函数、函数…… 微软的高级程序员编写了函数让我们这些搞应用的去调用,我不想在这里贬低搞应用的人,正是这些应用工程师连接起了科学和社会之间的桥梁,将来可以做销售,做管理,用自己逐渐积累起来的智慧和经验在社会上打拼。
但是,在技术上来说,诚实地说,这并不高深,不是吗?第一流的公司如微软、Sybase、Oracle 等总是面向社会大众的,这样才能有巨大的市场。但是他们往往也是站在社会的最顶层的:操作系统、编译器、数据库都值得一代代的专家去不断研究。这些帝国般的企业之所以伟大,恐怕不是“有经验”、“能吃苦”这些中国特色的概念所能涵盖的,艰深的技术体系、现代的管理哲学、强大的市场能力都是缺一不可的吧。我们既然有志于技术,并且正在起步阶段,何必急不可耐地要转去做“管理”,做“青年才俊”,那些所谓的“成功人士”的根底能有几何,这样子浮躁,胸中的规模和格局能有多大?
在我发现vc只是一个用途广泛的编程工具,并不能代表“知识”、“技术”的时候,我有些失落,无所不能的不是我,而是 MFC、SDK、DDK,是微软的工程师,他们做的,正是我想做的,或者说,我也想成为那种层次的人,现在我知道了,他们是专家,但这不会是一个梦,有一天我会做到的,为什么不能说出我的想法呢。那时公司做的系统里有一个压缩模块,领导找了一个 zlib 库,不让我自己做压缩算法,站在公司的立场上,我很理解,真的很理解,自己做算法要多久啊。但那时自己心中隐藏的一份倔强驱使我去寻找压缩原理的资料,我完全没有意识到,我即将打开一扇大门,进入一个神奇的“数据结构”的世界。“计算机艺术”的第一线阳光,居然也照到了我这样一个平凡的人的身上。
上面说到“计算机艺术”,或者进一步细化说“计算机编程艺术”,听起来很深奥,很高雅,但是在将要进入专业的压缩算法的研究时,我要请大家做的第一件事情是:忘掉自己的年龄、学历,忘掉自己的社会身份,忘掉编程语言,忘掉“面向对象”、“三层架构”等一切术语。把自己当作一个小孩,有一双求知的眼睛,对世界充满不倦的、单纯的好奇,唯一的前提是一个正常的具有人类理性思维能力的大脑。下面就让我们开始一段神奇的压缩算法之旅吧:1. 原理部分: 有两种形式的重复存在于计算机数据中,zip 就是对这两种重复进行了压缩。 一种是短语形式的重复,即三个字节以上的重复,对于这种重复,zip用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复,假设这两个数字各占一个字节,于是数据便得到了压缩,这很容易理解。 一个字节有 0 - 255 共 256 种可能的取值,三个字节有 256 * 256 * 256 共一千六百多万种可能的情况,更长的短语取值的可能情况以指数方式增长,出现重复的概率似乎极低,实则不然,各种类型的数据都有出现重复的倾向,一篇论文中,为数不多的术语倾向于重复出现;一篇小说,人名和地名会重复出现;一张上下渐变的背景图片,水平方向上的像素会重复出现;程序的源文件中,语法关键字会重复出现(我们写程序时,多少次前后copy、paste?),以几十 K 为单位的非压缩格式的数据中,倾向于大量出现短语式的重复。经过上面提到的方式进行压缩后,短语式重复的倾向被完全破坏,所以在压缩的结果上进行第二次短语式压缩一般是没有效果的。 第二种重复为单字节的重复,一个字节只有256种可能的取值,所以这种重复是必然的。其中,某些字节出现次数可能较多,另一些则较少,在统计上有分布不均匀的倾向,这是容易理解的,比如一个 ASCII 文本文件中,某些符号可能很少用到,而字母和数字则使用较多,各字母的使用频率也是不一样的,据说字母 e 的使用概率最高;许多图片呈现深色调或浅色调,深色(或浅色)的像素使用较多(这里顺便提一下:png 图片格式是一种无损压缩,其核心算法就是 zip 算法,它和 zip 格式的文件的主要区别在于:作为一种图片格式,它在文件头处存放了图片的大小、使用的颜色数等信息);上面提到的短语式压缩的结果也有这种倾向:重复倾向于出现在离当前压缩位置较近的地方,重复长度倾向于比较短(20字节以内)。这样,就有了压缩的可能:给 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。 在进一步讨论编码的要求以及办法前,先提一下:编码式压缩必须在短语式压缩之后进行,因为编码式压缩后,原先八位二进制值的字节就被破坏了,这样文件中短语式重复的倾向也会被破坏(除非先进行解码)。另外,短语式压缩后的结果:那些剩下的未被匹配的单、双字节和得到匹配的距离、长度值仍然具有取值分布不均匀性,因此,两种压缩方式的顺序不能变。 在编码式压缩后,以连续的八位作为一个字节,原先未压缩文件中所具有的字节取值不均匀的倾向被彻底破坏,成为随机性取值,根据统计学知识,随机性取值具有均匀性的倾向(比如抛硬币试验,抛一千次,正反面朝上的次数都接近于 500 次)。因此,编码式压缩后的结果无法再进行编码式压缩。 短语式压缩和编码式压缩是目前计算机科学界研究出的仅有的两种无损压缩方法,它们都无法重复进行,所以,压缩文件无法再次压缩(实际上,能反复进行的压缩算法是不可想象的,因为最终会压缩到 0 字节)。 短语式重复的倾向和字节取值分布不均匀的倾向是可以压缩的基础,两种压缩的顺序不能互换的原因也说了,下面我们来看编码式压缩的要求及方法:首先,为了使用不定长的编码表示单个字符,编码必须符合“前缀编码”的要求,即较短的编码决不能是较长编码的前缀,反过来说就是,任何一个字符的编码,都不是由另一个字符的编码加上若干位 0 或 1 组成,否则解压缩程序将无法解码。看一下前缀编码的一个最简单的例子:符号 编码A 0B 10C 110D 1110E 11110有了上面的码表,你一定可以轻松地从下面这串二进制流中分辨出真正的信息内容了:1110010101110110111100010 - DABBDCEAAB要构造符合这一要求的二进制编码体系,二叉树是最理想的选择。考察下面这棵二叉树: 根(root) 0 | 1 +-------+--------+ 0 | 1 0 | 1 +-----+------+ +----+----+ | | | | a | d e 0 | 1 +-----+-----+ | | b c要编码的字符总是出现在树叶上,假定从根向树叶行走的过程中,左转为0,右转为1,则一个字符的编码就是从根走到该字符所在树叶的路径。正因为字符只能出现在树叶上,任何一个字符的路径都不会是另一字符路径的前缀路径,符合要求的前缀编码也就构造成功了:a - 00 b - 010 c - 011 d - 10 e - 11接下来来看编码式压缩的过程:为了简化问题,假定一个文件中只出现了 a,b,c,d ,e四种字符,它们的出现次数分别是a : 6次b : 15次c : 2次d : 9次e : 1次如果用定长的编码方式为这四种字符编码: a : 000 b : 001 c : 010 d : 011 e : 100那么整个文件的长度是 3*6 + 3*15 + 3*2 + 3*9 + 3*1 = 99用二叉树表示这四种编码(其中叶子节点上的数字是其使用次数,非叶子节点上的数字是其左右孩子使用次数之和): 根 | +---------33---------+ | | +----32---+ +----1---+ | | | |+-21-+ +-11-+ +--1--+ | | | | | |6 15 2 9 1 (如果某个节点只有一个子节点,可以去掉这个子节点。) 根 | +------33------+ | | +-----32----+ 1 | | +--21--+ +--11--+ | | | | 6 15 2 9现在的编码是: a : 000 b : 001 c : 010 d : 011 e : 1 仍然符合“前缀编码”的要求。第一步:如果发现下层节点的数字大于上层节点的数字,就交换它们的位置,并重新计算非叶子节点的值。先交换11和1,由于11个字节缩短了一位,1个字节增长了一位,总文件缩短了10位。 根 | +----------33---------+ | | +-----22----+ +----11----+ | | | |+--21--+ 1 2 9| |6 15再交换15和1、6和2,最终得到这样的树: 根 | +----------33---------+ | | +-----18----+ +----15----+ | | | | +--3--+ 15 6 9 | | 2 1这时所有上层节点的数值都大于下层节点的数值,似乎无法再进一步压缩了。但是我们把每一层的最小的两个节点结合起来,常会发现仍有压缩余地。第二步:把每一层的最小的两个节点结合起来,重新计算相关节点的值。在上面的树中,第一、二、四三层都只有一或二个节点,无法重新组合,但第三层上有四个节点,我们把最小的3和6结合起来,并重新计算相关节点的值,成为下面这棵树。 根 | +----------33---------+ | | +------9-----+ +----24----+ | | | | +--3--+ 6 15 9 | | 2 1然后,再重复做第一步。这时第二层的9小于第三层的15,于是可以互换,有9个字节增长了一位,15个字节缩短了一位,文件总长度又缩短了6位。然后重新计算相关节点的值。 根 | +----------33---------+ | | 15 +----18----+ | | +------9-----+ 9 | | +--3--+ 6 | | 2 1这时发现所有的上层节点都大于下层节点,每一层上最小的两个节点被并在了一起,也不可能再产生比同层其他节点更小的父节点了。这时整个文件的长度是 3*6 + 1*15 + 4*2 + 2*9 + 4*1 = 63这时可以看出编码式压缩的一个基本前提:各节点之间的值要相差比较悬殊,以使某两个节点的和小于同层或下层的另一个节点,这样,交换节点才有利益。所以归根结底,原始文件中的字节使用频率必须相差较大,否则将没有两个节点的频率之和小于同层或下层其他节点的频率,也就无法压缩。反之,相差得越悬殊,两个节点的频率之和比同层或下层节点的频率小得越多,交换节点之后的利益也越大。在这个例子中,经过上面两步不断重复,得到了最优的二叉树,但不能保证在所有情况下,都能通过这两步的重复得到最优二叉树,下面来看另一个例子: 根 | +---------19--------+ | | +------12------+ 7 | | +---5---+ +---7---+ | | | |+-2-+ +-3-+ +-3-+ +-4-+| | | | | | | |1 1 1 2 1 2 2 2这个例子中,所有上层节点都大于等于下层节点,每一层最小的两个节点结合在了一起,但仍然可以进一步优化: 根 | +---------19--------+ | | +------12------+ 7 | | +---4---+ +---8---+ | | | |+-2-+ +-2-+ +-4-+ +-4-+| | | | | | | |1 1 1 1 2 2 2 2通过最低一层的第4第5个节点对换,第3层的8大于第2层的7。到这里,我们得出这样一个结论:一棵最优二叉编码树(所有上层节点都无法和下层节点交换),必须符合这样两个条件:1.所有上层节点都大于等于下层节点。2.某节点,设其较大的子节点为m,较小的子节点为n,m下的任一层的所有节点都应大于等于n下的该层的所有节点。当符合这两个条件时,任一层都无法产生更小的节点去和下层节点交换,也无法产生更大的节点去和上层节点交换。上面的两个例子是比较简单的,实际的文件中,一个字节有256种可能的取值,所以二叉树的叶子节点多达256个,需要不断的调整树形,最终的树形可能非常复杂,有一种非常精巧的算法可以快速地建起一棵最优二叉树,这种算法由D.Huffman(戴·霍夫曼)提出,下面我们先来介绍霍夫曼算法的步骤,然后再来证明通过这么简单的步骤得出的树形确实是一棵最优二叉树。霍夫曼算法的步骤是这样的:·从各个节点中找出最小的两个节点,给它们建一个父节点,值为这两个节点之和。·然后从节点序列中去除这两个节点,加入它们的父节点到序列中。重复上面两个步骤,直到节点序列中只剩下唯一一个节点。这时一棵最优二叉树就已经建成了,它的根就是剩下的这个节点。仍以上面的例子来看霍夫曼树的建立过程。最初的节点序列是这样的:a(6) b(15) c(2) d(9) e(1)把最小的c和e结合起来 | (3)a(6) b(15) d(9) +------+------+ | | c e不断重复,最终得到的树是这样的: 根 | +-----33-----+ | | 15 +----18----+ | | 9 +------9-----+ | | 6 +--3--+ | | 2 1这时各个字符的编码长度和前面我们说过的方法得到的编码长度是相同的,因而文件的总长度也是相同的: 3*6 + 1*15 + 4*2 + 2*9 + 4*1 = 63考察霍夫曼树的建立过程中的每一步的节点序列的变化:6 15 2 9 16 15 9 315 9 915 1833下面我们用逆推法来证明对于各种不同的节点序列,用霍夫曼算法建立起来的树总是一棵最优二叉树:对霍夫曼树的建立过程运用逆推法:当这个过程中的节点序列只有两个节点时(比如前例中的15和18),肯定是一棵最优二叉树,一个编码为0,另一个编码为1,无法再进一步优化。然后往前步进,节点序列中不断地减少一个节点,增加两个节点,在步进过程中将始终保持是一棵最优二叉树,这是因为:1.按照霍夫曼树的建立过程,新增的两个节点是当前节点序列中最小的两个,其他的任何两个节点的父节点都大于(或等于)这两个节点的父节点,只要前一步是最优二叉树,其他的任何两个节点的父节点就一定都处在它们的父节点的上层或同层,所以这两个节点一定处在当前二叉树的最低一层。2.这两个新增的节点是最小的,所以无法和其他上层节点对换。符合我们前面说的最优二叉树的第一个条件。3.只要前一步是最优二叉树,由于这两个新增的节点是最小的,即使同层有其他节点,也无法和同层其他节点重新结合,产生比它们的父节点更小的上层节点来和同层的其他节点对换。它们的父节点小于其他节点的父节点,它们又小于其他所有节点,只要前一步符合最优二叉树的第二个条件,到这一步仍将符合。这样一步步逆推下去,在这个过程中霍夫曼树每一步都始终保持着是一棵最优二叉树。由于每一步都从节点序列中删除两个节点,新增一个节点,霍夫曼树的建立过程共需 (原始节点数 - 1) 步,所以霍夫曼算法不失为一种精巧的编码式压缩算法。附:对于 huffman 树,《计算机程序设计艺术》中有完全不同的证明,大意是这样的:1.二叉编码树的内部节点(非叶子节点)数等于外部节点(叶子节点)数减1。2.二叉编码树的外部节点的加权路径长度(值乘以路径长度)之和,等于所有内部节点值之和。(这两条都可以通过对节点数运用数学归纳法来证明,留给大家做练习。)3.对 huffman 树的建立过程运用逆推,当只有一个内部节点时,肯定是一棵最优二叉树。4.往前步进,新增两个最小的外部节点,它们结合在一起产生一个新的内部节点,当且仅当原先的内部节点集合是极小化的,加入这个新的内部节点后仍是极小化的。(因为最小的两个节点结合在一起,并处于最低层,相对于它们分别和其他同层或上层节点结合在一起,至少不会增加加权路径长度。)5.随着内部节点数逐个增加,内部节点集合总维持极小化。2.实现部分 如果世界上从没有一个压缩程序,我们看了前面的压缩原理,将有信心一定能作出一个可以压缩大多数格式、内容的数据的程序,当我们着手要做这样一个程序的时候,会发现有很多的难题需要我们去一个个解决,下面将逐个描述这些难题,并详细分析 zip 算法是如何解决这些难题的,其中很多问题带有普遍意义,比如查找匹配,比如数组排序等等,这些都是说不尽的话题,让我们深入其中,做一番思考。我们前面说过,对于短语式重复,我们用“重复距当前位置的距离”和“重复的长度”这两个数字来表示这一段重复,以实现压缩,现在问题来了,一个字节能表示的数字大小为 0 -255,然而重复出现的位置和重复的长度都可能超过 255,事实上,二进制数的位数确定下来后,所能表示的数字大小的范围是有限的,n位的二进制数能表示的最大值是2的n次方减1,如果位数取得太大,对于大量的短匹配,可能不但起不到压缩作用,反而增大了最终的结果。针对这种情况,有两种不同的算法来解决这个问题,它们是两种不同的思路。一种称为 lz77 算法,这是一种很自然的思路:限制这两个数字的大小,以取得折衷的压缩效果。例如距离取 15 位,长度取 8 位,这样,距离的最大取值为 32 k - 1,长度的最大取值为 255,这两个数字占 23 位,比三个字节少一位,是符合压缩的要求的。让我们在头脑中想象一下 lz77 算法压缩进行时的情况,会出现有意思的模型: 最远匹配位置-> 当前处理位置->———┸—————————————————╂—————————————>压缩进行方向 已压缩部分 ┃ 未压缩部分 在最远匹配位置和当前处理位置之间是可以用来查找匹配的“字典”区域,随着压缩的进行,“字典”区域从待压缩文件的头部不断地向后滑动,直到达到文件的尾部,短语式压缩也就结束了。 解压缩也非常简单: ┎————————拷贝————————┒ 匹配位置 ┃ 当前处理位置 ┃ ┃<——匹配长度——>┃ ┠—————∨————┨———┸——————————┸———————╂——————————┸—>解压进行方向 已解压部分 ┃ 未解压部分 不断地从压缩文件中读出匹配位置值和匹配长度值,把已解压部分的匹配内容拷贝到解压文件尾部,遇到压缩文件中那些压缩时未能得到匹配,而是直接保存的单、双字节,解压时只要依次直接拷贝到文件尾部即可,直到整个压缩文件处理完毕。 lz77算法模型也被称为“滑动字典”模型或“滑动窗口”模型,由于它限制匹配的最大长度,对于某些存在大量的极长匹配的文件来说,这种折衷算法显出了缺陷。另有一种lzw算法对待压缩文件中存在大量极长匹配的情况进行了完全不同的算法设计,并且只用一个数字来表示一段短语,下面来描述一下lzw的压缩解压过程,然后来综合比较两者的适用情况。 lzw的压缩过程:1) 初始化一个指定大小的字典,把 256 种字节取值加入字典。2) 在待压缩文件的当前处理位置寻找在字典中出现的最长匹配,输出该匹配在字典中的序号。3) 如果字典没有达到最大容量,把该匹配加上它在待压缩文件中的下一个字节加入字典。4) 把当前处理位置移到该匹配后。5) 重复 2、3、4 直到文件输出完毕。 lzw 的解压过程:1) 初始化一个指定大小的字典,把 256 种字节取值加入字典。2) 从压缩文件中顺序读出一个字典序号,根据该序号,把字典中相应的数据拷贝到解压文件尾部。3) 如果字典没有达到最大容量,把前一个匹配内容加上当前匹配的第一个字节加入字典。4) 重复 2、3 两步直到压缩文件处理完毕。 从 lzw 的压缩过程,我们可以归纳出它不同于 lz77 算法的一些主要特点:1) 对于一段短语,它只输出一个数字,即字典中的序号。(这个数字的位数决定了字典的最大容量,当它的位数取得太大时,比如 24 位以上,对于短匹配占多数的情况,压缩率可能很低。取得太小时,比如 8 位,字典的容量受到限制。所以同样需要取舍。)2) 对于一个短语,比如 abcd ,当它在待压缩文件中第一次出现时,ab 被加入字典,第二次出现时,abc 被加入字典,第三次出现时,abcd 才会被加入字典,对于一些长匹配,它必须高频率地出现,并且字典有较大的容量,才会被最终完整地加入字典。相应地,lz77 只要匹配在“字典区域”中存在,马上就可以直接使用。3) 一个长匹配被加入字典的过程,是从两个字节开始,逐次增长一个字节,确定了字典的最大容量,也就间接确定了匹配的可能的最大长度。相对于 lz77 用两个数字来表示一个短语,lzw 只用一个数字来表示一个短语,因此,“字典序号”的位数可以取得多一点(二进制数多一位,意味着数值大一倍),也就是说最长匹配可以比 lz77 更长,当某些超长匹配高频率地出现,直到被完整地加入字典后,lzw将开始弥补初期的低效,逐渐显出自己的优势。 可以看出,在多数情况下,lz77 拥有更高的压缩率,而在待压缩文件中占绝大多数的是些超长匹配,并且相同的超长匹配高频率地反复出现时,lzw 更具优势,GIF 就是采用了 lzw 算法来压缩背景单一、图形简单的图片。zip 是用来压缩通用文件的,这就是它采用对大多数文件有更高压缩率的 lz77 算法的原因。 接下来 zip 算法将要解决在“字典区域”中如何高速查找最长匹配的问题。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
爱爱后有流血,心里很怕,想问问医生
2
有时候早上还没起来小腹中间突然很痛是怎么
3
我想问问我是不是得狂犬病我害怕
4
胡子怎么去除那个印子啊,求医生帮帮我
5
极个别地方,身上长疮。
6
月经推迟11天,未来,试纸阴性
7
曾做过造瘘先肠镜之后大便带血
8
慢性宫颈炎伴Asc-us,请医生帮忙,告
9
伤口能用吗能预防疤痕吗
10
老人咳嗽已几个月不见好怎么办
11
下体流黄水,每天凌晨四点多流醒,没有异味
12
小腹中间突然很痛是怎么回事呢
13
右胳膊酸困,晚上睡觉有点麻,那个东西有点
14
眼睛反复的出现红血丝,过几天又自己好了
15
经常发痒,吃过敏药能止痒,但每次买来的药
16
头晕脖子痛喉咙痛睡不着。
17
白带异味,来大姨妈迟迟不走,异味难闻
18
胸口有痰老是咳不出.
19
老年女,两年前肚子大,今年误诊说囊肿,原
20
肾虚脱发尿有余沥胸闷气短
21
不知道男的是否完全插入,有疼痛感,但没出
22
反流性食管炎.胃镜检查1食管裂孔疝.2贲
23
宝宝两个月十天有四天没有大便了。
24
眉毛刮了多久能长出来有什么办法让他一个
25
我没有不舒服的地方女,10岁
26
容易肝阳上亢引起头重重!
27
下体流黄水,没有异味,不痛不痒,大概一周
28
一个手指提重物后,手指头一直发麻,已经一
29
身上到处痒,像扉子一样的东西
30
被狗牙齿划伤,不是狗自己过来划的
31
鼻子闻东西一个味道,说不上来一种味道
32
手指掉了可以抹白凡士林吗????????
33
早上起床发现眼睛和脸有浮肿是什么症状
34
尖锐湿疣带了套还会传染吗???
35
恶心,胃部痛,不怎么想吃饭,有时候有点想
36
脚肿的很厉害不是很疼脚指盖已经好了
37
慢性宫颈炎伴Asc-us,盆腔积液,左侧
38
感冒刚好,现在一个鼻孔偶尔流鼻涕,一次性
39
入职检查的输尿管膀胱双肾b超能查出怀孕么
40
两只小腿在一系列运动或者长时间站立后明显
41
手臂内外侧都开始长汗毛
42
两个牙齿中间有个洞在两个槽牙之间
43
请各位专家帮我看看这个检查单,该怎么治疗
44
安全套破裂后用冲洗器冲洗阴道,有避孕作用
45
我会怀孕吗,我特别害怕,今年刚做掉一个!
46
为什么每次做完爱都感觉阴道有点不舒服呢
47
吃的药忌吃辣,可以吃大蒜素(保健品)么?
48
刚洗完澡后大腿内侧出现了一大片的小红点,
49
被小狗咬了刚刚,打贯彻落实刚回来?吗这次
50
请问一下阴茎上看得见血管突出是不是静脉精
51
皮肤大面积瘙痒起红块,且随时间向下转移
52
两个月大婴儿总是哭闹,嗜睡,睡觉是还爱使
53
声音嘶哑检查属于食管癌
54
脸上长痘痘一直不好,大概有一个月了,以前
55
这次月经很少而且晚了五天,晚的这几天就感
56
很怕会怀孕,很担心这问题,今年刚做掉一个
57
脸颊红疙瘩,时而痒,起了一粒一粒的白点,
58
我月经后9天做爱,但是保证没有射在里边,
59
月经推迟十天没来,请问医生,该怎样治疗,
60
天天早上肚子痛的很厉害
61
左太阳穴疼是怎么回事?????
62
看妇科病,医生会问到同房问题吗,为什么,
63
做近视力检查,散瞳药物不明显。怎么办?
64
不知道什么虫子咬的又红又肿,不痒不疼,有
65
6月22号打了第一针抑那通7月20号打
66
左侧小肚子痛有硬块,不痛就没有
67
生殖器那里长廯,长廯的地方发白
68
就是最里面的那个牙龈肿痛,早几年吃甲硝唑
69
人流一个月,又怀孕了,不知道怀了多长时间
70
宝宝男六个月体重11斤,身高61cm
71
小孩左脚走路不正长,但是不痛这是怎么回事
72
白头发越来越多烦死我了
73
怀孕三个月小腹疼了一晚上,不管换什么姿势
74
大脑呆笨,手足无力。坐立不安,无法睡觉。
75
外阴道口有肉赘,不疼不痒,白带多,有异味
76
四维彩超,心脏二尖瓣过瓣血流束小于三尖瓣
77
怀孕43天,想做药流会不会很痛苦?
78
顺产后快2个多月身上还没干净,请问怎么办
79
阳痿早泄怎么办呀,老头痛的经历
80
慢性宫颈炎伴Asc-us,左侧卵巢囊肿,
81
月经前胸疼,月经后为什么还会胸疼呢
82
在哪里有卖,对类风湿痛有效吗?
83
皮肤过敏了,红斑好多,好痒,晚上特别厉害
84
早上4点多肚子疼去厕所突然晕倒几秒就醒
85
股藓好久了,皮肤变黑,还痒,俩边都有
86
乙肝打干扰素发热怎么办
87
伤口好了以后那伤疤凸出了,而且使劲按还会
88
肾结石把输尿管堵住了要动乡术不
89
前列腺增生,一晚小便好几次,
90
左乳疼痛,是怎么了。于心脏有关系吗?
91
这三种药可以给五个月的宝宝一起吃吗?
92
四肢发冷,后脖子出汗后特别冷发冷
93
用拳头打了人小拇指骨头活动有点不灵活了
94
宝宝男,体重11斤,身高61cm,六个月
95
阴茎上长了一块小虫爬的血管打结一样的块请
96
十二指肠癌晚期扩散全身还有治吗?
97
小孩左脚走路不正长,但是不痛是怎么回事
98
腿上手上脚上起了很多的红包这是怎么了
99
失眠遗精大便干燥最近工作劳累眼睛干
100
一開始小腹痛後來肚臍部位疼,吃飯都好好的