讲解:C CSE 331 Spring 2017C/C++

IntroductionPro21、改进hash函数,减少由于hash函数结果相同导致的碰撞2、因为哈希表的大小发生变化,哈希函数最后一步的mod m的答案发生变化,导致原本在表中的数据位置需要作出调整,不然在查找时由于两次使用的哈希函数不一致会导致位置的不一致。3、不是,由于复杂度取决于碰撞几率,当碰撞几率小的时候可以理解为复杂度是均等的,但当碰撞几率大的时候复杂度不均等RequirementCSE 331 Spring 2017Project 3100 pointsDue April 20th, 9:00pm via CSE HandinThis is not a team work, do not copy somebody else’s work.Assignment OverviewThis assignment focuses on implementing a Hash Table using hashing with chaining and tabledoubling. You will design and implement the C++ program described below.Assignment DeliverablesThe deliverables for this assignment are the following files:HashTable.h - ​​The source code of your solution.problem2.pdf​​ - The PDF containing your answers to ​Problem 2​​.Be sure to use the specified file names and to submit your files for grading ​via the CSE handinsystem​​ before the project deadline.Assignment SpecificationsYour task will be to complete the methods list under ​Problem 1 and Problem 2​​ below.Assignment NotesPoints will be deducted if your solution has any warnings of type:comparison between signed and unsigned integer expressions [-Wsign-compare]The types specified in the functions are very important because of the size of the numbers usedin this ADT. With integers/floating-points in C++, if the destination of a value is not largeenough to hold the data in the value in the source, (​int f = uint64_t d). ​If you ignorethe warnings from the compiler because you used the incorrect types, ​consider those warningserrors and fix them without losing precision.Page 2​​ - Illustrations of the Hash Table implementation. See the last page of thisdocument for information on secondary resources and a quick overview of themake​commands provided.Page 3 ​​- Outlines ​Problem 1​​ and​ Problem 2​​.Page 4 ​​- Explains ​make​​, ​make test​​, and ​how to trace a segfault​​, and includes links tosecondary resources.Hash TablesHash Tables are one of the most important ADT in Computer Science because of theirpromise of ​constant time​​ operations and “constant” space complexity. We say “constant” spacecomplexity because in reality most efficient implementations Hash Tables may actually beslightly,​but not overly,​wasteful when it comes to space.The implementation used in this project uses ​Chaining​and ​Table Doubling/Halving​.Visti lecture notes for Chaining and please see the above links for a clear understanding of theresizing that will enable the desire performance.When we ​insert​​ a ​key​​ into the Hash Table a few things happen.1.The ​key​​ is ​pre-hashed—converted to an integer representation for mapping.2.Using the ​hash function​​, the ​pre-hash​​ is mapped to one of the slots (chains). ma. Hashing functions like division method, multiplication method, etc.3.If the Hash Table has as many items as it has chains, the table doubles in size.a. If doubled, all items in the Hash Table are put into the ​hash function​​ oncemore in order to find which chain the item should be placed in.4.Once the chain is found, the node is placed at the ​tail​​ of the chain.When we ​remove​​ a ​key ​​something from the Hash Table a few things happen.1.The ​key​​ is ​pre-hashed—converted to an integer representation for mapping.2.Using the ​hash function​​, the ​pre-hash​​ is mapped to one of the slots (chains). ma. Hashing functions like division method, multiplication method, etc.3.Once the chain is found, it is traversed (linked list traversal) until a node is foundwith the matching ​key​​ (the ​hash​​ of the key, that is).4.Once the node is found, the removal is made in-place.2Problem 1Your job is to implement a Hash Table that uses table doubling and chaining to amortize most standardoperations to ​Θ(1)​​. You have to implement the following public methods in your Hash Table:1) HashTable(size_t m)a) Builds the empty Hash Table with a total ​m​ chains. All chains will be empty. ​m​ must be positive.2C代写 CSE 331 Spring 2017代写C/C++实验) ~HashTable()a) Destructor for the Hash Table ensures all nodes in every chain is deleted properly.3) void insert(string key, string value):a) Adds the key value pair to the Hash Table.b) If the key already exists, the value is overwritten with ​value​.c) The table is required to grow using the ​Grow​ function when . where ​n​ is the number of n > melements in the Hash Table and ​m​ is the number of chains in the Hash Table. For example, a HashTable of size 4 would need to grow after the 5​th​​insert​ operation without any interweavingremove​ operations. The size will grow to where is the number of chains in the Hash Table m 2 mcurrently. Only double after an ​add​ operation. A table of size ​0​​ should double to size ​1​​.4) const string* get(string key) const:a) Returns a pointer to the value of the key in the Hash Table if found, otherwise returns ​nullptr​.5) void remove(string key):a) Removes key-value pair (represented by the ​ChainNode​ class) from the Hash Table.b) The table is required to shrink using the ​Shrink​ function when the table is at least ​¾​ ​empty. Thisis true when . The check is always done at the ​end​​ of a ​remove​ operation. Only shrink n ≤4mafter a ​remove​ operation. In your code, take the ​ceiling​of and check if it is​if so, shrink​.4mn ≥6) uint64_t HashFunction(string key):a) Returns the index of the chain ​key​ should be mapped to according to the ​division​method.7) uint64_t Grow():a) Grows the Hash Table such that 2m m =8) uint64_t Shrink():a) Shrinks the Hash Table such that m/2 m =9) void Rehash(size_t originalSize):a) Rehashes the items in the Hash Table to align with the current ​HashFunction.​he See thesecondary resources for intuition on why we must re-hash all our elements (and what rehashactually entails. ​Hint:​the pre-hash of the values will never change.Problem 2Answer the following questions in a digital document and submit your answers in ​a single​​ PDF,named ​problem2.pdf​​:1. What changes would we need to make in order to decrease the probability of a collision (in ourimplementation)?2. Why must we re-hash all of the items in the table when growing/shrinking?3. Is this data structure constant time per operation? Why or why not? (hint: amortization)3Using the makefile and testing your workRun the project on the CSE server ​black (black.cse.msu.edu)​using the commands below.Makefile commands:makeThis will compile the code in main.cpp and generate an executable name ​ProjectHashTable. ​Runthis executable with the command ​./ProjectHashTablemake testThis will run the tests for the project. These tests are only a subset of all tests and only cover a few of therequired methods. Passing all tests does not guarantee you will get all the points. These are only publictests. Your code will be tested against these tests and extra private tests.Tracing segfaults:Is the executable generated from main.cpp crashing?1.In the terminal run the following (type the command and pressreturn), notice the ​or​​ which means either command will work:a.makeb.gdb (or lldb) ./ProjectHashTablec.rd.where (if gdb)e.bt (if lldb)2.The line your code crashed on should be indicated in the terminal.Are the tests crashing?:1.All steps are == except:a.make testb.gdb (or lldb) ./tests/testsPlease make sure to have your ​​tests​subfolder in your project folder in order to runthe make test command successfully. If not, extract the folder from the project zip.More informationFor more information, see the following online video lecture or the following lecture notes:CLRS(11.2, 11.3)6.006 MIT Online Video Lecture​​ / ​​Lecture NotesReference​: ​​This project was created by the following incredible students. ​Ibrahim Ahmed​authorof the project and multiple test cases. ​Fatema Alsaleh and Scott Swarthout​authors of multipletest cases.转自:http://ass.3daixie.com/2019042536766877.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,451评论 0 13
  • 螳螂捕蝉 黄雀在后拍照取证
    张小生哈哈阅读 258评论 0 0
  • 2019年4月3日 星期三sunny。 事件描述:今天晚上打比赛,比赛快开始了,有一个男同事来不了,临时我们改变...
    亲亲九儿阅读 78评论 0 1
  • 很久没有下雨了,同事说至从我带伞到办公室后,就一直没下雨了,很是奇怪。 那晚,加班加到10点后我像个古代侠客般...
    斋雨阅读 289评论 4 11