雜 湊 表.

Slides:



Advertisements
Liknende presentasjoner
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Advertisements

 練習 XSL 程式的撰寫 › 了解 XSL 的轉換意義  在 XML 文件中宣告 XSL › fhwang XML Programming 10.
6218 白盛弘. 北極熊的家 8&p=%E5%8C%97%E6%A5%B5%E7%86%8A&fr2=tab-web&fr=yfp-s.
鼾音訊號測量計畫 執導老師 : 侯春茹 老師 組員 : 金雍庭 胡庭恩 林承葦 賴彥亨. 目錄 訊號的簡介 ▫ 臨床應用 ▫ 量測部位與方法 ▫ 訊號特徵 訊號處理流程 鼾聲量得訊號.
いまこれが熱い 米国の Web2.0 サービス CNET Japan Innovation Conference 2006 Autumn データセクション(株) 橋本大也 (株)ネットエイジグループ チーフエバンジェリスト.
LHU_ME 魏慶隆 李瑞宗老師 零件組立之基本操作  零件組立之步驟  Component  Assembly  [ 選取零件 ]  定位  定位指令說明 定位指令說明.
2009 Summer Camp MRP 物料需求規劃 演講者:黃怡勳.
是 1. 全球暖化是真的嗎 ? 人類 2. 是什麼原因又是誰造成的 ? 破壞基本生態的穩定 3. 氣候改變對地球及我們有什麼影響 ? 最貧窮、最低窪、最熱的國家受害最大,但是每個人都無法倖免 於難 4. 誰會受到最大的衝擊 ? 發展與氣候變化 國際商務學系 A 林宜 如.
弊社取り扱いスマートホン媒 体 Avarice Yell inc.. スマートフォン取り扱い アドネットワーク&リスティング Avarice Yell inc.
線形代数学.
Order To Cash 主講人:蓋冠宇.
芬蘭 - 進口 黃硯翎 A 國花:鈴蘭. 芬蘭進口 黃硯翎 A 國家印象代表圖 ~~ 桑拿浴.
要求プロセスの数量化 要求工学 WG in 宇和島 要求獲得 要求記述 要求検証 要求管理 Stakeholder の識別 要求抽出 ネゴシエーション モデル化 記述 記述の解析 テスト・実行 要求工学プロセス.
人类进步与环境代价 —— 绿色化学关注的问题 孙立广 (中国科技大学极地环境研究室). 一、引言 从绿色革命到绿色科技 20 世纪 60 年代 “ 绿色革命 ” 的结果: 农作物高产 高产水稻品种 化肥大量使用烈性农药 水土污染、 肥力降低 水荒.
小沢研究室紹介 大学院を志す人のために. 素粒子・原子核物理学とは? 自然を支配する基本法則はどのようなものか 物質を構成する究極の要素は何か 宇宙はなぜ現在の姿になっているのか 宇宙にはどのような物質が存在し、それはどのように作られ たのか 2000年以上も前から人類の探究心を駆り立ててやまないこれら.
第 14 章 SQL 語言處理資料庫 14-1 SQL 語言的基礎14-1 SQL 語言的基礎 14-2 SQL 資料庫查詢指令14-2 SQL 資料庫查詢指令 14-3 SQL 聚合函數14-3 SQL 聚合函數 14-5 SQL 語言的資料庫操作14-5 SQL 語言的資料庫操作.
HTML + Dreamweaver 學術 課程. 甚麼是 HTML ? HTML 全名是 Hyper Text Markup Language ﹐ 是電腦語言的一種。這種電腦語言是可透過瀏 覽軟件 (Browser - Internet Explorer, Netscape) 翻譯出來﹐翻出來的就是我們看到的.
1 © 2011 台灣培生教育出版 (Pearson Education Taiwan). 2 學習目標 1. 了解收益管理在供應鏈中所扮演的角色。 2. 界定出何種收益管理做法具有效率的情況。 3. 描述制定收益管理決策時,需要考量的取捨條 件。
中国法律检索系统. 数据库介绍 系统收录 22 个相对独立但又互通互联的法律信息数据库:《中 国法律法规规章司法解释全库》、《中国地方法规规章库》、 《港澳台法律库》、《中华人民共和国条约库》、《外国与国际 法律库》、《法律文书样式库》、《最高人民法院公报案例库》、 《中国法院裁判文书数据库》、《合同范本数据库》、《仲裁裁.
1 Understanding and Constructing Approaches to Teaching 第二講 教案設計初探 林碧霞博士 Lam Bick Har©2006.
2005 年 1 月 18 日台灣視障用數位典藏之 語音檢索系統 1 「貓頭鷹」 ~ 台灣視障用數位典藏 之語音檢索系統 93 年數位典藏創意加值計畫心得交流 「貓頭鷹」 ~ 台灣視障用數位典藏 之語音檢索系統 93 年數位典藏創意加值計畫心得交流 報告人 : 唐傳義 張智星 國立清華大學資工系教授.
EQ與情緒管理 資料截自清涼音出版社(VCD AV13)-張錦貴教授.
计算器的使用 CASIO 系列. 可编程序计算器使用方法简介 CASIO fx-350ms.
2009 年世界地球日 您必須知道的全球暖化現況 為倡導保護地球,國際上訂定每年的四月二十四 日世界地球日。今年活動主軸是大家一齊來防止地 球暖化。在那一天,世界各地愛護環境的人,不但 要用行動展現「熱愛地球」實力,也要依推動者的 建議,一齊穿上藍色系列的衣裝出門,以展現退暖.
第八組  M 林秋香 M 顧家容  M 裴方南 M 陳黃慶璃  M 賴盈如 M 葉芳如.
A02 通識教育課程 ( 二年級 ) 生物化學、醫學生涯、醫學研究方法 金髮小蜜的故事 教案代碼: 9622A02-4.
企業員工訓練與發展 7.1 訓練與發展的意義與系統化程序 7.2 訓練需求分析 7.3 訓練的設計與準備 7.4 非管理職員工的訓練方法
Word Word 2000 的操作環境 功能表列 尺規 垂直捲軸 顯示模式 瀏覽物件鈕 水平捲軸 狀態顯示列 內文區域 關閉鈕 放到最大鈕 縮到最小鈕標題列 插入點.
專業‧互相尊重‧開拓者精神 台北大學投影機案 教 育 訓 練. Agenda § 使用前注意說明 § 控制面板操作說明 § 投影布幕之使用 § 關機操作順序說明 § 簡易故障排除 § 問題討論時間.
教學助理培訓課程 部落格城市管理 講師 : 程如晞.
土地使用管制 2008 年 10 月 23 日. 政府導向 社會目標 比較真實市場 與社會目標 規劃 政策 政府 市場 失靈 土地市場 財產市場 傳統福利經濟學觀點下的規劃理念 設計 引起被發現 去改變.
講述教學法案例.
11 類別化程式 11.1 結構與類別 結構與類別 結構化程式設計 結構化程式設計 物件導向程式設計 物件導向程式設計 程式類別 (class)
1987 年的 聖誕節前夕,當我正在美國進修 資管碩士學位時,有一門課要求我們四個 人一組到企業去實際幫他們寫系統,由於 同組的另外三個老美對系統開發都沒什麼 概念,所 以我這位組長只好重責一肩挑起, 幾乎是獨立完成了所有的工作。終於拖到 了結案,廠商及老師對我們的(其實是我 的)系統都相當滿意。第二天我滿懷希望.
MPI 分布内存并行 程序开发. 第四章 点对点通信函数 第四章 点对点通信函数 传送机制(两种): 阻塞方式,它必须等到消息从本地送出之后才可 以执行后续的语句,保证了缓冲区等资源的可再 用性; 非阻塞方式,它不须等到消息从本地送出就可以 执行后续的语句,但非阻塞调用的返回并不保证 资源的可再用性。
類比式語言教室材使用說明會 東吳大學語言教學中心. 說明會內容 l 開(關)機步驟 l 操作畫面說明:聲音頻道、影像頻道 l 操作示範: DVD 影片、教學電腦、錄影 帶、 3D 教材提示機、錄音帶 l 耳機互動:監聽、對話、分組、示範 l 錄音功能:對拷、學生自主拷貝.
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
香港科技大学学生会 语言学会 广东话课程 2007 第二节 自我介绍. 温习 1 早晨 返学 放学 jou2 san4 faan1 hok6 fong3 hok6 你上几点堂? nei3 seung5 gei2 dim2 tong4 你食左早餐未呀? nei5 sik6 jo2 jou2 can1.
江西省委组织部远教办 (地 市 视 频 会 议 系 统)培训 江西省委组织部远教办 (地 市 视 频 会 议 系 统)培训 主讲人:饶斌.
口腔良性腫瘤 蔡政峰醫師.
加藤ゼミへのエントリー (ゼミ活動の際のスタッフプレート ♪ ). エントリーシート方式 面談 2〜3名で、 10 〜 20 分の面談をします。 エントリーシート を提出してもらいます。
民意型態 民意調查 蔡佳泓.  True Believers— 真實信仰者,具有意識形態  Concerned Citizen— 關心政治者,對於政治 有興趣.
國立台北科技大學 工業工程與管理所碩士論文 網頁行銷美學與顧客體驗關鍵因素之研究 指導教授:羅啟源教授 研究生:黃金圳甄
克里斯提安.齊瑪曼 (Krystian Zimerman) 齊瑪曼  出生於波蘭扎布熱  父親啟蒙開始學習鋼琴  1963 年在卡托維治音樂院師從 楊辛斯基 楊辛斯基  1975 年贏得蕭邦國際 鋼琴大賽第一名,當時年僅十九歲 鋼琴大賽第一名,當時年僅十九歲.
林綺雲 國立台北護理學院 生死教育與輔導研究所教授(創所所長)
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
財務管理概論 劉亞秋‧薛立言 合著 (東華書局, 2007)
行銷學 marketing: an introduction
授課老師:吳有龍 教授 報告學生:王智鳳 學號: G 優使性 - 需求分析及高階設計 優使性 - 需求分析及高階設計.
嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
報告人:李克強 校內分機: : 圖書館電子資源利用講習.
台北大學統計系 汪群超 資料庫系統 汪群超02/22/2000. 資料庫資訊系統實例 貿易訂單管理 貿易訂單管理 職棒球員攻守紀錄 職棒球員攻守紀錄 圖書資訊系統 圖書資訊系統 VCD/DVD 租借管理系統VCD/DVD 租借管理系統 網路商場 網路商場.
吉林大学远程教育 共 计: 48 学时 主讲单位: 吉林大学基础医学院 药 理 教 研 室 第 二 十 七 讲 主讲教师: 李 晶.
第二节 鞭毛菌亚门真菌(Mastigomycotina)
1 《通信原理》总结 2 通信原理是通信学科的理论基础, 以调制和编码技术为核心,着重介绍 传输信号的形成和接收方式,进行理 论分析与性能评价。 可靠性 模拟系统的噪声性能分析 数字系统的误码性能分析 差错控制编码 有效性 各种信道复用方式: TDM , FDM , CDMA 等。
UClinux 简介 Embedded operating system μClinux uClinux 是应用于嵌入式设备的最著名、应用 最广泛一个 Linux 发行版本,它也是一个开放 源码的项目, uClinux 的源代码和开发工具可 以免费从
偵錯技術.
-- Homo Sapien -- DESIGN For A Especial Spirit Group : b 陳姵華 b 蘇若 喬 b 王淑燕 b 柳柏亙.
第 13 章 檔案與資料夾處理 13-1 檔案與資料夾操作 13-1 檔案與資料夾操作 13-2 循序檔案的文字檔案讀寫 13-2 循序檔案的文字檔案讀寫 13-3 隨機檔案的處理 13-3 隨機檔案的處理 13-4 二進位檔案的讀寫 13-4 二進位檔案的讀寫 13-5 檔案對話方塊 13-5 檔案對話方塊.
CorelDRAW X4 平面设计半月通 ─ 电子教案 第二章 手绘和形状工具的使用 本章导读 本章要点本章任务 上机实训.
DESIGNER. 創作主題: FANTASY 幻想旅程 報名方式:傳真報名 ─ 報名 ─ ( 報名表請向系辦索取或至「校園比賽 Facebook 粉絲團」下載 ) 競賽組隊:分為大專組與高中職組 報名隊伍以個人或團體組隊參加皆可,每人以報名一組為限.
有机化学 主讲教师 霍文兰 教 材 高鸿宾 主编. Chapter 5 alkynes alkadiene.
第六章 纱线和织物的基本知识.
2015 年学员操作手册 奥鹏教育. C o nt en ts 目录目录 平台首页简介 1 个人工作室 2 学习任务 3 研修活动 4 坊内答疑 5 资源分享 6.
现代陶艺 现代陶艺 -- 泥条盘筑成型 -- 泥条盘筑成型 任课教师 赵 芳. 一、陶艺的概念 所谓陶艺,它泛指陶瓷日用品,陈设品的造型、釉色 和装饰等所呈现的艺术特点,也专指陶器之中的艺术陶器 和瓷器中的艺术瓷。 陶艺作品是典型的工艺美术,它既有其他工艺美术的 共性,更有着区别于其他工艺美术的质的规定性。任何一.
野生动物保护系列讲座. 我们中国人自称为龙的传人。清朝 光绪年代,总税务司发行 “ 大龙邮票 ” , 大龙邮票的最早发行日期被认为在 1878 年 7 月 24 日至 8 月 1 日之间。 龙文化 —— 龙年.
3dsmax 基本工具介绍 3dsmax 基础建模类型介绍 多边形建模操作技巧 材质基础知识介绍 讲授: 8 节 实训: 8 节 掌握游戏 3D 制作工具 —3dsmax 的基本工作原理。
XXX 交流电路的功率. 一、正弦交流电路功率的基本概念 设正弦交流电路的总电压 u 与总电流 i 的相位差 ( 即阻 抗角 ) 为  ,则电压与电流的瞬时值表达式为 u = U m sin(  t   ) , i = I m sin(  t) 瞬时功率为 p = ui = U m I m.
Utskrift av presentasjonen:

雜 湊 表

內 容 大 綱 雜湊表的定義 雜湊表的操作 雜湊函數 碰撞處理 雜湊表資料刪除 雜湊表的範例程式

雜湊表(hash table)是一種可以快速處理資料新增、搜尋及刪除的資料結構。 利用資料的鍵值(key)直接對應至儲存位置的方法,雜湊表可以在幾次的資料比對後就完成資料加入、搜尋及刪除的動作。

雜湊表的定義 (1/2) 雜湊表(hash table): 是一個將資料鍵值透過雜湊函數(hash function)轉換為資料儲存位置,而可快速進行資料加入、搜尋以及刪除的資料結構。 透過資料的鍵值(key)直接由雜湊函數(hash function)對應至儲存位置的方法,雜湊表可以在幾次的資料比對後就完成資料新增、搜尋及刪除的動作。 因此,雜湊表的各項操作的時間複雜度均為O(1)。下圖顯示雜湊表、雜湊函數與儲存位置的關係。

雜湊表的定義 (2/2) 位置 鍵值及資料 儲存位置 (position) 鍵值(key) 雜湊函數 (hash function) 位置 鍵值及資料 1 2 ‧ p-2 p-1 儲存位置 (position) 鍵值(key) 雜湊函數 (hash function) 雜湊表(hash table) 雜湊表、雜湊函數與儲存位置之關係。

雜湊表的操作 (1/1) 雜湊表的操作主要有以下三個: 新增(insert):將一新的鍵值加入雜湊表中。 刪除(delete):將一鍵值自雜湊表中移除。 搜尋(search):尋找某一鍵值所在位置。 下圖顯示一個執行各種雜湊表操作的實例。 假設k為鍵值、p為雜湊表大小,在下圖的實例中,採用k%p的公式(除法)來計算鍵值的儲存位置,而當二個鍵值k1、k2對應至相同儲存位置時,這稱為發生碰撞(collision),則採用線性探測(linear probing)的方式,依序尋找(k2+1)%p、(k2+2)%p、(k2+3)%p…等位置來作為新的儲存位置。

步 驟 操 作 輸 出 [0 雜湊表內容 p-1] 1. 新增(10) ─ [0 0 0 10 0 0 0] 2. 新增(26) [0 0 0 10 0 26 0] 3. 新增(50) [0 50 0 10 0 26 0] 4. 新增(66) [0 50 0 10 66 26 0] 5. 新增(74) [0 50 0 10 66 26 74] 6. 搜尋(66 ) 4 7. 刪除(66 ) [0 50 0 10 -1 26 74] 8. 搜尋(74 ) 6 9. -1 10. 新增(14)   [14 50 0 10 -1 26 74] 11. 新增(23) [14 50 23 10 -1 26 74] 12. 新增(38) 雜湊表已滿例外

雜湊函數 (1/8) 雜湊表必須依賴雜湊函數(hash function)來計算出資料儲存位置,因此,雜湊函數與雜湊表有密不可分的關係。 H: H(key)=position 對雜湊表而言,若雜湊函數可以將所有的鍵值都對應到一個獨一無二的位置,則可以很單純的直接進行資料的加入、搜尋或刪除的動作。 然而,由於鍵值的可能值數目往往遠遠大於雜湊表的儲存空間,因此難免會有不同的鍵值對應到相同儲存位置的情況,我們將這種情況稱為碰撞(collision)。碰撞是雜湊表的運作中最需要用心解決的問題。

雜湊函數 (2/8) 雜湊函數可以進行資料鍵值與雜湊表儲存位置之間的轉換,一個好的雜湊函數必須具有以下的特點: 1. 計算簡單。 1. 計算簡單。 2. 碰撞(collision)少。 3. 不可造成雜湊表儲存位置局部偏重(bias)的狀況。

雜湊函數 (3/8) 以下我們介紹常用的雜湊函數: 1. 除法(division method): H(key)=key mod p,其中p代表雜湊表的大小,它必須是質數(prime number)。我們將雜湊表大小p限制為質數是為了減少碰撞發生,例如,鍵值10,26,50,在p=8的情況下都會得到2的雜湊位置,即 H(10)=H(26)=H(50)=H(74)=2,若我們選擇p=7,則 H(10)=3,H(26)=5,H(50)=1,H(74)=4,其中完全沒有碰撞發生。

雜湊函數 (4/8) 2. 平方取中間為數法(mid-square method): H(key)=mid(key2),其中mid可以取得key2的一些中間位數。因為一個鍵值平方的中間位數與鍵值的所有位數的數字大都沒有關係,因此,不同鍵值就有較大的機率對應到不同的位置;例如:若我們取萬位數、千位數及百位數,則 H(1234)=mid(1522756)=227 H(4321)=mid(18671041)=710

雜湊函數 (5/8) 3. 折疊法(folding method): 此方法將鍵值key分割為長度為L的幾個片段,使之除了最後一個片段之外,其他所有的片段長度均相同。分段完畢之後再將所有片段相加,即可得到最後的儲存位置,例如: key=12345678989,取L=3,我們可將key分成下列幾個片段: 123、456、789、89,我們再將這些片段相加起來得到123+456+789+89=1457,其中1457就是我們儲存資料的位置。

雜湊函數 (6/8) 折疊法還有許多不同的做法,例如,我們可以將各片段進行不同的旋轉(如456可旋轉為564或645)或翻轉(如456可翻轉為654),相加的時候也可以選擇向左對齊或向右對齊相加(如89選擇向左對齊相加,則實際加入的值為890),甚至於再將最後片段相加的值再除以表格大小(質數p)。例如,若表格大小為97,則前述Key=123456789892的實際儲存位置=1457 mod 97=2。

雜湊函數 (7/8) 4. 位數分析法(digit analysis method): 假如所有的鍵值已經事先知道了,則非常適合使用此方法。這個方法首先會針對每個位數中所有數字出現的頻率加以分析,並挑出其中分佈最均勻的幾個位數,用來作為計算位置的依據,例如,以鍵值為電話號碼為例(如下圖):

雜湊函數 (8/8) ˇ ˇ ˇ 我們注意到其中第4個,第6個及第7個電話號碼的分部最為平均,因此我們取這三個位置的數字作為最後儲存資料的位置,如此可以將碰撞發生的機會減到最低。 1 2 3 4 5 6 7 位置(取3位) 255 9 8 486 538 169 721 847 314

碰撞處理 (1/7) 即使經過仔細的設計,雜奏函數還是難免會有碰撞產生,此時,我們要使用碰撞處理(collision-handling)方法來處理這樣的狀況,以下我們說明常見的碰撞處理方法: 1. 線性探測(linear probing)法: 當碰撞發生時,就從發生碰撞的位置開始,一個一個的尋找未被佔用的儲存位置,直到找到一個未被佔用的位置或整個雜湊表完全被搜尋完畢為止。

碰撞處理 (2/7) 我們用C(key)=(H(key)+di) mod p來表示,其中di=1, 2, ..., p-1,表示第i次產生碰撞後,碰撞處理所探測的資料儲存位置。例如,鍵值10, 26, 50, 66, 74在探用除法為雜湊函數(p=7),並採用線性探測為碰撞處理法的情況下,所有鍵值對應的儲存位置為: C(10)=10%7=3 C(26)=26%7=5 C(50)=50%7=1 C(66)=(66%7=3)→4 C(74)=(74%7=4)→5→6

碰撞處理 (3/7) 2. 雙重雜湊(double hashing)法: 當碰撞發生時,就使用第二個預先設定的雜湊函數來進行新的第二個儲存位置的取得,如果在第二個位地也產生碰撞,則再利用第三個預先設定的雜湊函數來取得新的第三個儲存位置,依此類推,…。 例如,我們將雜湊函數設為: C1=H1(key)= key%p; C2=H2(key)= C1*key%p; C3=H3(key)= C2*key%p; 餘類推,…。

碰撞處理 (4/7) 在p為7的情況下,鍵值10, 26, 50, 66, 74的儲存位置為─ H(10)=10%7=3; 一般而言,採用雙重雜湊的碰撞處理法會比採用線性碰撞處理所需的探測次數來得少。

碰撞處理 (5/7) 3. 分別鏈結(separate chaining): 當碰撞發生時,就將資料儲存到鏈結串列中,這種方法的優點是不需要因為碰撞而需要重新計算資料的儲存位置,而其缺點是當碰撞次數(假設為t)較多時,使用鏈結串列來儲存這些鍵值發生碰撞的資料會較無效率,因為針對一個長度為t的鏈結串列而言,資料的刪除與搜尋的時間與t成正比。

碰撞處理 (6/7) 例如,當雜湊表大小p為7 的情況下,鍵值10, 26, 50, 66, 74, 17使用「分別鏈結」 方式儲存的情形如下: 雜湊表 1 2 3 4 5 6 7 50 10 74 26 66 17

碰撞處理 (7/7) 上述鍵值中的10, 66及17經過雜湊函數的計算,都對應到儲存位置3,因此,我們用鏈結串列將這三個鍵值分別儲存起來。

雜湊表資料刪除 (1/3) 對於使用線性探測或雙重雜湊探測碰撞處理法的雜湊表,在刪除資料時必須將資料位置標示為「已刪除」,以免讓後續的探測誤以為此位置為空而停止搜尋。 例如,在採用除法為雜湊函數(p=7)以及線性探測為碰撞處理法的情況下,鍵值10, 26, 50, 66, 74的儲存位置為如下圖(a),在刪除66之後形成下圖(b),此時若尋找鍵值74,則會形成如下圖(c)中回應「找不到」的錯誤狀況。此時應如下圖(d)一般,在刪除66之後將之標示為「已刪除」(我們將「已刪除」的鍵值以D表示),則可以如下圖(e)中所示的狀況,正確的找到欲搜尋的資料。

雜湊表資料刪除 (2/3) 50 10 66 26 74 50 10 26 74 50 10 26 74 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 刪除 66 尋找 74 66 74,回應找不到 74 74 74 (a) (b) (c)

雜湊表資料刪除 (3/3) 50 10 D 26 74 50 10 D 26 74 74,線性探測往下找 線性探測往下找 回應找到 (d) 1 2 3 4 5 6 1 2 3 4 5 6 74,線性探測往下找 線性探測往下找 回應找到 (d) (e)

雜湊表的範例程式 (1/11) 以下我們以Java語言撰寫雜湊表的範例程式,我們採用除法為雜湊函數,並採用線性探測為碰撞處理方法。我們並假設所有的鍵值均為正數,而使用-1代表已刪除之鍵值,使用0代表未被佔用的儲存位置。 1:     //檔名:雜湊表類別.java 2:     //說明:「雜湊表類別」範例程式 3:     // 假設所有的鍵值均大於0,鍵值為-1則代表鍵值已刪除 4:     public class 雜湊表類別 { 5:     private int[] 儲存陣列; //儲存鍵值之陣列 6:     private int p; //p代表儲存陣列大小 7:     雜湊表類別(int 大小參數) { 8:     儲存陣列=new int[大小參數]; 9:     p=大小參數; 10:   }

雜湊表的範例程式 (2/11) 11: public int 搜尋(int k) { //k代表鍵值 12: int 位置; 13:     位置=k%p; 14:     if (儲存陣列[位置]==k) return 位置; 15:     else return 搜尋碰撞處理(位置, k); 16:     } 17:     public int 搜尋碰撞處理(int 碰撞位置, int k) { 18:     int 位置=碰撞位置; 19:     while(true) { 20: 位置=(位置+1)%p; 21: if(位置==碰撞位置) return -1; //「位置」指標已繞一圈, 表示整個空間已滿 22: if(儲存陣列[位置]==k) return 位置; //傳回k位於雜湊表中之位 置 23: if(儲存陣列[位置]==0) return -1; //傳回-1代表找不到 24: }

雜湊表的範例程式 (3/11) 25: } 26: public int 新增搜尋(int k) { //k代表鍵值 27: int 位置; 25:    } 26:    public int 新增搜尋(int k) { //k代表鍵值 27:    int 位置; 28:    位置=k%p; 29:    if (儲存陣列[位置]==0) return 位置; 30:    else return 新增搜尋碰撞處理(位置, k); 31:    } 32:    public int 新增搜尋碰撞處理(int 碰撞位置, int k) { 33:    int 位置=碰撞位置; 34: while(true) { 35: 位置=(位置+1)%p; 36: if(儲存陣列[位置]==0) return 位置;//找到空的位置 37: if(位置==碰撞位置) return -1; //「位置」指標已繞一圈,表 示整個空間已滿 38: //傳回-1代表找不到未被佔用之位置

雜湊表的範例程式 (4/11) 39:    } 40:    } 41:    public void 新增(int k) throws 雜湊表滿出例外 { //k代表鍵值 42:    int 位置=新增搜尋(k); 43:    if (位置>=0) 儲存陣列[位置]=k; 44:    else throw new 雜湊表滿出例外(); 45:    } 46:    public void 刪除(int k) throws 資料不存在例外 { //k代表鍵值 47:    int 位置=搜尋(k); 48: if (位置>=0) 儲存陣列[位置]=-1; //使用-1代表鍵值已刪除 49:   else throw new 資料不存在例外(); 50:   }

雜湊表的範例程式 (5/11) 51: public String toString( ) { 52: String 傳回字串=""; 53:     for (int i=0;i<p;++i) 54:     傳回字串+=(儲存陣列[i]+“ ”); //將每一項資料以一個空白隔 開併入傳回字串中 55:     return 傳回字串; 56:     } 57:     } //類別:雜湊表類別 定義區塊結束 58:     class 雜湊表滿出例外 extends Exception { } 59:     //建立一個例外類別,以便在雜湊表滿出時可以被丟出 60: class 資料不存在例外 extends Exception { } 61: //建立一個例外類別,以便在欲刪除資料不存在時可以被丟出

雜湊表的範例程式 (6/11) 1: //檔名:雜湊表測試.java 2: //說明:「雜湊表類別」之測試程式 2:     //說明:「雜湊表類別」之測試程式 3:     import javax.swing.*; 4:     public class 雜湊表測試 extends JApplet { 5:     public void init( ) { 6:     雜湊表類別 雜湊表=new 雜湊表類別(7); 7:     String 顯示字串=""; 8:     try { 9:     顯示字串+="操作\t輸出\t0(雜湊表內容)p-1"; 10:  顯示字串+="\n新增(10)";

雜湊表的範例程式 (7/11) 11: 雜湊表.新增(10); 12: 顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 11:     雜湊表.新增(10); 12:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 併入顯示文字中 13:     顯示字串+="\n新增(26)"; 14:     雜湊表.新增(26); 15:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 16:     顯示字串+="\n新增(50)"; 17:     雜湊表.新增(50); 18:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 19:    顯示字串+="\n新增(66)"; 20: 雜湊表.新增(66); 21: 顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後併 入顯示文字中 22: 顯示字串+="\n新增(74)";

雜湊表的範例程式 (8/11) 23: 雜湊表.新增(74); 24: 顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 23:     雜湊表.新增(74); 24:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 併入顯示文字中 25:     顯示字串+="\n搜尋(66)"; 26:     顯示字串+="\t"+雜湊表.搜尋(66); 27:     顯示字串+=“\t”+雜湊表; //將整個雜湊表之內容轉為字串後 28:     顯示字串+="\n刪除(66)"; 29:     雜湊表.刪除(66) ; 30:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 31:     顯示字串+="\n搜尋(74)"; 32:  顯示字串+="\t"+雜湊表.搜尋(74); 33:  顯示字串+=“\t”+雜湊表; //將整個雜湊表之內容轉為字串後併入顯示文字中

雜湊表的範例程式 (9/11) 34: 顯示字串+="\n搜尋(66)"; 35: 顯示字串+="\t"+雜湊表.搜尋(66); 38:     雜湊表.新增(14); 39:     顯示字串+="\t\t"+雜湊表; //將整個雜湊表之內容轉為字串後併入顯示文字中 40:     顯示字串+="\n新增(23)"; 41:     雜湊表.新增(23); 42:     顯示字串+="\t\t"+雜湊表; //將整個雜湊表之內容轉為字串後併入顯示文字中 43: 顯示字串+="\n新增(38)";

雜湊表的範例程式 (10/11) 44: 雜湊表.新增(38); 44:     雜湊表.新增(38); 45:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 併入顯示文字中 46:     顯示字串+="\n新增(5)"; 47:     雜湊表.新增(5); 48:     顯示字串+=“\t\t”+雜湊表; //將整個雜湊表之內容轉為字串後 49:     } 50:     catch(雜湊表滿出例外 e) {顯示字串+="\t雜湊表滿出"; } 51:     catch(資料不存在例外 e) {顯示字串+="\t欲刪除之資料不存在"; } 52:     finally {JOptionPane.showMessageDialog(null,new JTextArea(顯示字串));} 53:  } //方法:init() 定義區塊結束 54:  } //類別:雜湊表測試 定義區塊結束

雜湊表的範例程式 (11/11) 1: <html> 2: <h1>「雜湊表測試」執行中<h1> 3: <applet code="雜湊表測試.class" width=350 height=100> 4:   </applet> 5:   </html> 程式執行結果

Q&A

程式執行結果