/usr/share/octave/site/m/vlfeat/toolbox/misc/vl_ihashsum.m is in octave-vlfeat 0.9.17+dfsg0-6build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | % VL_IHASHSUM Accumulate integer labels into a hash table
% [H,ID,NEXT] = VL_IHASHSUM(H,ID,NEXT,K,X) counts the number of
% occurences of the columns of X, accumulating these to the hash
% table represented by the tripled H,ID,NEXT.
%
% X is a D x N array of class UINT8 each row of which defines an D
% dimensional label. Labels cannot be all zeros.
%
% H and NEXT are 1 x C arrays of class UINT32 and ID is a D x C
% array of class UINT8. H is a vector of counts, ID stores, for each
% element of H, the corresponding label, and NEXT is a vector of
% indexes.
%
% Once constructed, the hash table can be searched by means of the
% VL_IHASHFIND() function.
%
% The hash table uses double hashing [1] with an initial size equal
% to K (so that C >= K). Given a label X, this is first hashed by
% using the FNV algorithm [2] to one of K bucket. If this bucket is
% free, it is assigned to label X and the count is incremented. If
% the bucket is already assigned to the same label X, the count is
% incremented. If the bucket is already assigned to a different
% label, a second hash is used to scan (probe) the table for a free
% bucket.
%
% If no free/matching bucket is found (because the hash table is
% full) an overflow area containing extra buckets is used. This is
% visited by reading off indexe from the NEXT vector, until a
% matching bucket is found or the overflow area is enlarged.
%
% Example::
% The following example counts integer bi-dimensional label
% occurences:
%
% K = 5 ;
% h = zeros(1,K,'uint32') ;
% id = zeros(2,K,'uint8');
% next = zeros(1,K,'uint32') ;
% X = uint8([1 1 ; 1 2 ; 2 1 ; 1 1]') ;
% [h,id,next] = vl_ihashsum(h,id,next,K,X) ;
%
% resulting in
%
% h = [1 0 1 2 0]
% id = [1 0 2 1 0
% 2 0 1 1 0]
% next = [0 0 0 0 0]
%
% For example, [1;2] has a count of 1 and [1;1] has a count of
% 2. NEXT is zero because there have been no collisions.
%
% REFERENCES::
% [1] http://en.wikipedia.org/wiki/Double_hashing
% [2] http://www.isthe.com/chongo/tech/comp/fnv
%
% See also: VL_IHASHFIND().
% Author: Andrea Vedaldi
% Copyright (C) 2008-12 Andrea Vedaldi.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).
|