最高效的进制是什么?

初学二进制的时候,老师喜欢问一个问题,为何二进制很重要?同学们喜欢这么回答:因为二进制非常有趣、容易理解而且更加高效!我非常清楚,对他们而言,二进制并不有趣,也不容易,更为重要的是,他们不知道什么进制更加高效。原谅我的夸张,大多数人(包括学计算机数十年的老手)也不见得知道什么进制最高效。因为,老师从来不教,而且问这样的问题有意思吗?嗯哼,看看下面的分析再下结论吧。

首先,我们先定义电路的开销。二进制有两种状态,如果把二进制电路的开销定为2(两个单位开销),那么三进制有三种状态,开销就是3,四进制有四个状态则开销就是4。因此,我们可令b进制电路的开销为b。

其次,b进制如果要表达0到M范围的值需要log_b( M + 1 ) (即,以b为底对M+1求对数)这么多电路。比如,如果是二进制要表达0-255,则需要log( 256 ) = 8个比特。 又比如,用十进制表示0-999需要log_10(1000)=3个十进制数。

接着,就可以定义表达这M+1个数所使用电路的开销,简单的乘法得:
c = k*log_b(M+1)*b (公式1)
其中,k是一个比例常数。

然后,就需要使用一点点高等数学的知识了。把c理解为b的函数,该函数会在导数为零处达到极值,因此,要对c进行求导。有一个技巧就是,先对log_b(M+1)进行换底(高中的换底公式没有忘记吧,刚高考完的大一新生们?)得到以e为底的自然对数表达:ln (M+1) / ln b 。其好处还是明显的,把M+1这一项独立出来。运用链式法则,整理得:
c‘ = k*ln (M+1) * (ln b - 1 )/ (ln b)^2
该公式在ln b - 1时为0,即 b为e (2.718,欧拉常数,又称纳皮尔常数,我最近才知道这个名字。)时为零。因此,三进制是最高效的进制。

最后,二进制与三进制差别有多大呢?使用公式1,很容易算:
c(2) : c(3) = 2*ln 3 : 3*ln 2 = 1.056
结论是,二进制比三进制稍微开销大那么一点点。如果结合二进制电路在实现上的优势,这点开销也许就可以忽略不计。

以上分析展示了一种分析问题解决问题的典范实例,可推广称为通用方法,值得学习。就结论本身而言,也许还不如提出问题更有价值。

本文的分析源自于Henry S. Warren的《Hacker's delight》,目前是第二版,有中文翻译版(不建议购买),值得阅读,是一本内涵深刻的算法书,尽管名字有点古怪。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 4、二测量文件的文件扩展名通常为“.bin”或“.dat”,这种文件格式中数据以二形式行存储,相对于文本文件格式而言更为紧凑、高效。写入二文件的函数通常包括以下步骤: 1. 打开文件,通常使用fopen()函数; 2. 将需要写入文件的数据以二形式存入内存中的缓冲区中; 3. 将缓冲区中的数据以二形式写入文件中,通常使用fwrite()函数; 4. 关闭文件,通常使用fclose()函数。 5、虚拟仪器由软件部分和硬件部分组成。其中,软件部分通常是指运行在计算机上的控、数据处理和显示等程序,硬件部分则是指连接到计算机上的各种传感器、信号发生器、控器等实际物理设备。虚拟仪器的软件部分通常包括以下主要组成部分: 1. 控器:用于控仪器的各种操作,例如设置参数、执行测量操作等; 2. 数据处理模块:用于对测量数据行处理和分析,例如数据滤波、曲线拟合、功率谱分析等; 3. 显示模块:用于以图形或数字的形式显示测量结果; 4. 存储模块:用于将测量结果保存到文件或数据库中,方便以后行查看和分析。 虚拟仪器的硬件部分则根据具体测量需求而定,通常包括各种传感器、信号发生器、控器、放大器、滤波器等。虚拟仪器的优点是具有较高的灵活性和可扩展性,用户可以根据需要选择不同的硬件设备,并通过编写自定义程序或插件来扩展软件功能。 ### 回答2: 4、二测量文件的文件扩展名是什么,简述一下写入二文件函数? 二测量文件的文件扩展名通常为.bin。二文件是以二形式存储数据的文件。相比文本文件,二文件可以更直接地操作和传输数据。 在大多数编程语言中,写入二文件通常需要以下几个步骤: 1. 打开文件:使用相应的文件操作函数打开要写入的二文件,通常需要指定文件路径和打开模式。 2. 准备数据:将要写入文件的数据准备好,可以是单个变量、数组或其他数据结构。 3. 写入文件:使用相应的写入函数将数据写入已打开的文件中。写入函数根据所使用的编程语言而有所不同,一般需要指定要写入的数据和写入的位置。 4. 关闭文件:完成数据写入之后,使用文件操作函数关闭已打开的文件。这个步骤是保证数据写入成功并释放相关资源的重要操作。 通过上述步骤,我们可以将数据以二形式写入文件中,便于后续的读取和处理。 5、虚拟仪器由哪两个部分组成?它们主要又包括哪些部分? 虚拟仪器由软件和硬件两个部分组成。 软件部分主要包括以下几个部分: 1. 控程序:控仪器的运行,通过与硬件通信控输入输出,并将仪器的测量结果显示给用户。 2. 用户界面:提供用户与仪器交互的接口,包括显示仪器状态、调整参数设置、启动停止测量等功能。 3. 数据处理与分析:对仪器测得的数据行处理、分析和展示,例如生成曲线、计算结果和报告等。 4. 数据存储与管理:将测量数据保存到文件或数据库中,并提供数据管理和查询功能。 硬件部分主要包括以下几个部分: 1. 传感器/探头:用于测量物理量的传感器或探头,将物理量转换为电信号。 2. 数据采集和处理单元:负责采集和处理传感器/探头产生的电信号,并将处理后的数据发送给软件部分。 3. 信号发生器:产生特定频率、幅度和波形的信号,用于校准、测试仪器或与被测物行交互。 4. 通信接口:与计算机或其他设备行通信,传输数据以及接收控信号。 虚拟仪器将软件和硬件部分结合起来,通过软件的控和数据处理实现测量、测试和分析等功能。它可以大大简化仪器的使用和维护,提高测量的灵活性和可靠性。 ### 回答3: 4、二测量文件的文件扩展名是.dat,其用于存储二测量数据的文件。相比于文本文件,二文件以二形式存储数据,可以更高效地保存和读取大量的数值数据。 写入二文件的函数一般分为以下几个步骤: 1. 打开文件:首先需要通过函数打开文件,指定文件名和打开方式。打开方式一般为二写入模式("wb")。 2. 写入数据:使用相应的函数将数据写入文件。可以使用fwrite函数逐个字节地将数据写入文件,也可以使用fwrite函数一次性将一块数据写入文件。 3. 关闭文件:在完成数据写入后,需要使用函数关闭文件,以便系统释放资源并保存文件。 5、虚拟仪器由硬件层和软件层组成。 硬件层包括仪器接口卡、传感器、执行器等物理设备。仪器接口卡负责将电脑与传感器、执行器连接,实现信号的输入和输出。传感器和执行器用于实时采集或控物理量。 软件层主要包括驱动程序和虚拟仪器软件。驱动程序用于控和读取硬件接口卡的数据,实现与硬件的交互。虚拟仪器软件提供了一个图形用户界面,用户可以通过软件来实时显示、分析和处理测量数据。 虚拟仪器软件一般包括以下部分: 1. 仪器控:提供了一系列的操作按钮和设置选项,用于控仪器的参数设置、校准、开关等操作。 2. 数据采集:用于实时从传感器获取测量数据,并行实时显示。同时,还可以行采样率设置、触发设置等操作。 3. 数据处理:提供了一系列的数据处理功能,如滤波、傅里叶变换、绘图等,用于对采集到的数据行分析和处理。 4. 数据存储:提供将数据保存到本地文件或数据库中的功能,以便后续分析和查看。 5. 远程控:有些虚拟仪器软件还支持远程控功能,用户可以通过网络连接实现远程控和查看实验证据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值