Skip to content
Snippets Groups Projects
Commit e234b44b authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Testprogramm für Hash-Tabellen, 5.5.2022

parent 76b93330
No related branches found
No related tags found
No related merge requests found
#!/bin/sh
counter=$(wc -l hash-test.dat | cut -d " " -f 1)
n=$((10000 - counter))
pwgen -N $n 32 \
| while read s; do
counter=$((counter + 1))
echo $counter $s
done
#include <stdio.h>
#include <errno.h>
#include <error.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
const int ERROR = -1;
const int size = 1117;
const int bufsize = 100;
int n[size]; // zunächst: alle 0
const char *check[size]; // zunächst: alle NULL
constexpr int hash (const char *name)
{
// Cantor pairing function
uint8_t n0 = name ? name[0] : 0;
uint8_t n1 = n0 ? name[1] : 0;
uint8_t n2 = n1 ? name[2] : 0;
return ((n0 + n1) / 2 * (n0 + n1 + 1) + n2) % size;
}
void put_number (const char *name, int value)
{
int idx = hash (name);
if (check[idx] && strcmp (check[idx], name) != 0)
fprintf (stderr, "occupied: %s = %d\n", name, value);
else
{
check[idx] = name;
n[idx] = value;
}
}
int get_number (const char *name)
{
int value = ERROR;
int idx = hash (name);
if (check[idx] && strcmp (check[idx], name) == 0)
value = n[idx];
else
fprintf (stderr, "not found: %s\n", name);
return value;
}
static void read_data (FILE *f, char **name, int *value)
{
int v;
char buffer[bufsize];
fscanf (f, "%d", &v);
fgets (buffer, bufsize - 1, f);
int l = strlen (buffer);
if (l > 0 && buffer[l - 1] == '\n')
buffer[l - 1] = 0;
const char *n = buffer;
while (n[0] == ' ')
n++;
l = strlen (n);
if (*name == NULL)
*name = (char *) malloc (l);
strncpy (*name, n, l + 1);
*value = v;
}
int main (int argc, char **argv)
{
const char *filename = "hash-test.dat";
if (argc > 1)
filename = argv[1];
FILE *f = fopen (filename, "r");
if (!f)
error (errno, errno, "cannot open file \"%s\"", filename);
while (!feof (f))
{
int value;
char *name = NULL;
read_data (f, &name, &value);
put_number (name, value);
}
rewind (f);
while (!feof (f))
{
int value;
char name[bufsize];
char *p = name;
read_data (f, &p, &value);
int v = get_number (name);
if (v != value)
printf ("%s: %d instead of %d\n", name, v, value);
}
fclose (f);
return 0;
}
1 Weifae2oolejez5johNgah9eiphie8su
2 aex3Ceefosha6ooviu6theeFahk1ohpa
3 Quiquurohcah2ahpheiMeciQui2uihoo
4 ailiesoama6AhGhohweefae8ZauK3Zoo
5 shahghi8shaetahnap3IiTheep4eewii
6 eigiemota6Phoothohp0Aethai2oow7p
7 deigho4Eapia1hutoh2Ith5kaxie1ahz
8 lis0aeNgoang7heiPhemoo5Phoo4eigu
9 ruFeoc0aixiphahYoTagh1ohNgoh7koo
10 Wahqu0icee4iexooh6lu4ul2mahseaxa
11 aite4aik3Xijusanguzaech6ahdo4coF
12 Ne6iepaegh3coh7ohsh7phu3eevai7da
13 kei7oe1WeeCeicifi9ie1Faes7poa4eu
14 uud9vawies3AeK3ein7uezohD4dai3ow
15 wuujeP6sooBij0aeniemohsheiZ9olon
16 FaDiuVaa9quoh2veepho5jei0ush9vah
17 Aht0sheenu3aghohZ2ChahquieTee4Fa
18 hieFieph5Ohmaesee1ohdeiweizuoca8
19 AiquuPae4roshochuoS5ieree0ada0Ae
20 ahNeiChooghe6shies5ateiM4thu7Ivi
21 umieciegei5ohsiakei2fo4Eiy5ahn2e
22 yipheif3weB3eeshup5thai5seiseele
23 waeghaidiSahwio8pu2kahf0vijong1S
24 zuu0laiX9phohyah9Zosh5aek2quiBuw
25 oja1aes5daeyah6ieph9EeGuoj2caimo
26 hooth9aiGa1Cii1Ea3vahgaN8eeh7iew
27 chas5luth2oodonahroh9eek2cieBaiM
28 vooj0zae3yeebe1lei7Thuaph1eikiha
29 pheiWohpoTah6zifoQueiph5Mooy2Ahr
30 Ohvi4aucei7ahx5neereeg6se2Ath3ce
31 eh2ohGh0aipu2jioxiethaiSuoxoogae
32 ohjooDiet5ohpheshi1rieMut4queira
33 Mah9Quah4NaeDoe7achie7ohy6uo1Zoh
34 soos7giS3hohsuthooph9fazaeKaNguw
35 laiNesh6miesahmohMooshoofaiphu5J
36 iegh8pe6eethee5ahtaej1jiCh0iQuou
37 Quabaesh1Si0iek5ahtoo5gee0thaebi
38 oolaenosoxaKaov4xohTh3ohNgaisi0p
39 aingee5moo7neesho2deiquooj1Ahtoh
40 naVei0OngaeMu7oingaishaenai9jooz
41 eej2OoseebaedeiShoob1jookoo2Shoh
42 cie2thiushae2quu3shib3Uheer2Aesh
43 ooSheehait2ohthiebeikagh5eeJiedi
44 goopu2es3oophaegh7Aekeebohxie2az
45 queiLeelu2fahk1oc7tiexiuSuoph2ie
46 eiYeefooleefah7EiW6theoghaeZii4i
47 aesedaelohshomeiy6Naemah8peQu6Ei
48 naebaiphueNgoo1aeWu3aiGh3goo9eet
49 feiju3DudievaogiYeeC9Ceiphouv1ko
50 ushi0aip3uuNgoh0aeS6thei7oo1chai
51 ahw6voongoj9eehae4VieChu5eephoop
52 coovahu4oozuud5ceeb4Fai9eev0uguu
53 eThai2ohGoht5ahpae5Rio4uT1sieShe
54 ohVeg8mie3oeNaeCucae2uyaiKaepah7
55 laiBae2iebabee7eeciez2ohngieJej8
56 of2eec9ahg6daecheeshahPeibea1eib
57 oosheikaiMaejieho7Ahr6lohgheer8U
58 Autaepuu8Enei0ohtool2UbuRa0oobig
59 Xeejei7ahw1ohSae2quai8wieGhahdoh
60 ieCh1OhfooKei8Juxohng8Yahla7naed
61 cae4shaid1Iehaquaeshu2xooK4fai1o
62 iGh2ahphai8ohphoshuo5maiphi7thuf
63 QuoeshungaesohbieFuz0mie3aPhiex5
64 ob4Kephootheeph6daelohlope5nuada
65 ohfailophu2pei8FailosaiY9Cange7r
66 queHaip5foh1oozix5oopo9uyuiD2kei
67 zei5sah2eep8ooN3ieshu0au6eiTe9ke
68 Awita5upe1Eiciephiew1eiri6uKieke
69 pai0weiCh7chugooz2aingieviechoo6
70 joaPhohceez1eingae2saesh6aehaen3
71 aey6kohveuphiethooki6chaigahChoh
72 ueseex8osheiweeXe8chiesh3ti8keeb
73 vieKie9eo2Ro1aingoobohwos5Xeeluu
74 ahshu3phaiBoo6uquoov1Zi7xa9yoh9c
75 Su6booWevaekonone6uedaeShee9Thee
76 AhCheebaecoh5ahshaigeepeiN1borih
77 uv3cu8ohmuilo2ool3fecie3naef6Am8
78 feiTechei5AhGhah3ubuM0saesh6eeg4
79 at2Ihe0de7eikoo0pei8Aingipe5deti
80 cohpeu2eiGhai3eiNgu2aelooteesagh
81 zahsee4ooyeik0aesh2pohm7AeJu8aej
82 ohDae9vaibi6quie7ue8bienootheipo
83 Ego3so5ahs2eree0ahlait7eu4aazeey
84 aibeithafe8Quaghu2xah5aew0Ier9ah
85 oebe2geezohgeo0AVuGh1uth6iv1keik
86 ieS2beiyahthei9ohJ6lok9XohKohbae
87 leepeigheeGa5eiThoadee8soh0ohPhe
88 sohxae9cethoh2aeW5Shaeth1Ohthoh5
89 Nu5aemiNgu6Iev5pohYooshai2ci7ier
90 dei5eechaVeim7dethaz0ha2neipoo3n
91 eoxoJaaxah3naeZ6Cieghiobeip8aing
92 uuneek9aef2yaifa9eShaethaexi6yae
93 uereeloh5ozu9etahCha4oe4joonai2e
94 sooqu8pahDeinaidaingohghaeDichei
95 Aiquaed5aiNeyaek8heiyoh4chah3ao5
96 eemoh7noo0eijaGhohReewaej3say4bi
97 fai9eixai7Moko6okoh7oogeeCha5Ooy
98 thoo7Eic2quahwagoaXeeha0aitholoo
99 Oofoh1ohjexu9axaex0iebua5ohdahCh
100 ne7ee0aev1oopha3eem7xee9mee6quuG
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment