Jcompress 是一款基于哈夫曼编码和最小堆的无损压缩、解压缩小程序,支持任何格式的文件的压缩与解压缩。
Jcompress 的源代码位于 Utility 的 repository 分类下的 Jcompress 目录,后续会在 Utility 下面增加其他一些实用的小程序,比如基于 socket 的文件断点下载小程序等等。
最小堆排序算法基本上是按照<数据结构>严蔚敏版的算法来实现的,其具体功能这里不再赘述,仅列出代码,读者可以参考课本自行分析之。首先是heap_min_adjust,也就是调整堆,代码如下所示:
int heap_min_adjust(HuffmanNode **huffman_node_array, long data_start, long data_end){ /** ** check error for argument */ if(huffman_node_array==NULL || data_start<0 || data_end<0 || data_end<data_start){ printf("heap_min_adjust: argument error\n"); exit(0); } if(data_end==data_start) return 1; /** ** the top of heap-min indicated by index data_start is the only element ** which need to be adjusted to make a min-heap */ HuffmanNode * current_data_tobe_adjust=huffman_node_array[data_start]; long current_indexof_data=data_start; for(long cur=2*data_start;cur<=data_end;cur=2*cur){ if(cur<data_end){ /** compare the left child and right child to find the min one */ if(((huffman_node_array[cur])->data_8bit_count)>((huffman_node_array[cur+1])->data_8bit_count)){ cur+=1; } } if((current_data_tobe_adjust->data_8bit_count)<=((huffman_node_array[cur])->data_8bit_count)) break; huffman_node_array[current_indexof_data]=huffman_node_array[cur]; current_indexof_data=cur; } huffman_node_array[current_indexof_data]=current_data_tobe_adjust; /** ** return 1 means everything is ok */ return 1; }
接下来是heap_min_construct()的代码,此函数是通过不断的调用上面的调整堆的函数来达到堆排序的目的。
int heap_min_construct(HuffmanNode **huffman_node_array, long array_size){ /** valid data start from index 1 not 0 */ /** ** check error for argument */ if(huffman_node_array==NULL || array_size<=0 || array_size>256){ printf("heap_min_construct: argument error\n"); exit(0); } for(long HeapRoot=array_size/2; HeapRoot>=1;HeapRoot--){ heap_min_adjust(huffman_node_array,HeapRoot,array_size); } return 1; }
最后是heap_min_get2min()函数。
int heap_min_get2min(HuffmanNode **huffman_node_array, HuffmanNode **min_first, HuffmanNode **min_second, long *heap_size){ /** ** check argument **/ if(huffman_node_array==NULL){ printf("heap_min_get2min: argument error\n"); exit(0); } *min_first=huffman_node_array[1]; huffman_node_array[1]=huffman_node_array[*heap_size]; (*heap_size)-=1; /** after we get the min data, we should again adjust the heap to make a min-heap */ heap_min_adjust(huffman_node_array,1,*heap_size); *min_second=huffman_node_array[1]; huffman_node_array[1]=huffman_node_array[*heap_size]; (*heap_size)-=1; /** the same as above*/ if(*heap_size>0){ heap_min_adjust(huffman_node_array,1,*heap_size); } return 1; }
本文向大家介绍有损压缩和无损压缩之间的区别,包括了有损压缩和无损压缩之间的区别的使用技巧和注意事项,需要的朋友参考一下 数据压缩是指将大文件缩小为较小大小的文件并可以再次将其解压缩为大文件的技术。有损压缩会将大文件恢复为原始格式,但会丢失一些数据,这是不明显的,而无损压缩会将大文件恢复为原始格式而不会丢失任何数据。 以下是有损压缩和无损压缩之间的一些重要区别。 序号 键 有损压缩 无损压缩 1 数
tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使
本文向大家介绍C#无损压缩图片,包括了C#无损压缩图片的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭
OS-X 优胜美地 目标-C 压缩视频输入(AVCaptureDeviceFormat=='muxx'/'isr') 压缩视频流作为支持“muxx/isr”有效载荷格式的HAL捕获设备(AVCaptureDevice)暴露于操作系统,我希望能够直接访问压缩有效载荷的原始字节(不解压)。 使用“+(AVCaptureDevice*)DeviceWithUniqueID:(NSString*)Devi
这些是我正在使用的当前论点: 根据:http://www.imagemagick.org/script/command-line-options.php#define 和http://www.w3.org/tr/png-filters.html null 问题: 这是无损压缩吗?如果没有,错在哪里? 知道如何实现更好的无损压缩吗?
我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?
主要内容:1. 压缩和解压缩介绍,2. 启用压缩,3. 启用解压缩,4. 发送压缩文件本节介绍如何配置响应的压缩或解压缩以及发送压缩文件。 在这篇文章中,涉及内容如下 - 压缩和解压缩介绍 启用压缩 启用解压缩 发送压缩文件 1. 压缩和解压缩介绍 压缩响应通常会显着减少传输数据的大小。 然而,由于压缩在运行时发生,它还可以增加相当大的处理开销,这会对性能产生负面影响 在向客户端发送响应之前,NGINX会执行压缩,但不会“压缩”已压缩的响应(例如,由代理的服务器)。 2. 启用压缩