热门问题
时间线
聊天
视角

索引映射

来自维基百科,自由的百科全书

Remove ads

索引映射(Index mapping)也称为直接定址(direct addressing)或平凡散列函数(trivial hash function)是计算机科学中对阵列的应用,利用阵列查表来找到主键所有全集分别对应的值[1]。 此方式适用在主键全集不大的情形,因此可以针对每一个可能的主键分配记忆体。 其效能是源至在任何阵列中查表的时间复杂度都是常数。

适用的阵列

有许多实例中的资料有效值限制在小范围内。此时适合使用平凡散列函数,以数值作为查表的键值,以下是一些例子:

  • 一年中的月份(1–12)
  • 一个月内的(1–31)
  • 一星期的第几天(1–7)
  • 人类年龄(0–130),用在人寿保险精算表,定期抵押贷款
  • ASCII字元(0–127)

例子

利用平凡散列函数,非迭代式的查表法,可以完全消除条件判断以及分支,减少程式中的指令路径长度英语instruction path length

避免分支

Roger Sayle提供一个程式[2],完全消除以下switch指令英语switch statement会有的多路分支

inline bool HasOnly30Days(int m)
{
	switch (m) {
	case 4:  // April
	case 6:  // June
	case 9:  // September
	case 11: // November
		return true;
	default:
		return false;
	}
}

其作法是用以下的查表法:

inline bool HasOnly30Days(int m)
{
	static const bool T[] = { 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };
	return T[m-1];
}

参考资料

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads