全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1615
推到 Plurk!
推到 Facebook!

請問 Delphi 有沒有將字串轉成 hashCode 的函式??

尚未結案
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-12 23:26:25 IP:211.76.xxx.xxx 未訂閱
相信大家都有一個共同經驗,運用 TDataSet.Locate 若資料量大時會越來越慢! 我想最好的做法就是 Key 值能直接換算成一個唯一數字,然後將資料存入陣列中,直接用『位置索引』我想是最快的了(因為根本不需要比對鍵值)。但是往往那個Key值字串值沒有什麼規則...。 前陣子看 Thinking in java 裡知道 Java 裡 String 是一種物件,且所有物件都有 Object.hashCode():Int; 的方法=>任何物件都可以轉換出一個重複率極低的 HashCode!(即使真重複有另一個機制可區別...) 所以 Delphi 用了兩年了我還不知道有沒有這樣的函式或元件真是慚愧,希望有人能指點我一下,謝謝! JackTasy
------
JackTasy
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-13 05:05:35 IP:61.70.xxx.xxx 未訂閱
引言: 相信大家都有一個共同經驗,運用 TDataSet.Locate 若資料量大時會越來越慢! 我想最好的做法就是 Key 值能直接換算成一個唯一數字,然後將資料存入陣列中,直接用『位置索引』我想是最快的了(因為根本不需要比對鍵值)。但是往往那個Key值字串值沒有什麼規則...。 前陣子看 Thinking in java 裡知道 Java 裡 String 是一種物件,且所有物件都有 Object.hashCode():Int; 的方法=>任何物件都可以轉換出一個重複率極低的 HashCode!(即使真重複有另一個機制可區別...) 所以 Delphi 用了兩年了我還不知道有沒有這樣的函式或元件真是慚愧,希望有人能指點我一下,謝謝! JackTasy
我看你自己寫比較快,Java 的 hashcode 乃是基於其資料是 string, 而且書上這麼說,你該不會全相信吧!反正 Hash 這不是什麼難的觀念,自己寫應該不是問題,而且配合你的資料特性來寫,會比較方便處理,至少碰撞可以減到最低,如果應試要找個別人寫好的東西,那你的資料性質勢必要去配合,如果無法配合,那你豈不又要傷腦筋!
justimchung
一般會員


發表:0
回覆:4
積分:0
註冊:2003-05-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-13 11:03:18 IP:163.28.xxx.xxx 未訂閱
引言: 相信大家都有一個共同經驗,運用 TDataSet.Locate 若資料量大時會越來越慢! 我想最好的做法就是 Key 值能直接換算成一個唯一數字,然後將資料存入陣列中,直接用『位置索引』我想是最快的了(因為根本不需要比對鍵值)。但是往往那個Key值字串值沒有什麼規則...。 前陣子看 Thinking in java 裡知道 Java 裡 String 是一種物件,且所有物件都有 Object.hashCode():Int; 的方法=>任何物件都可以轉換出一個重複率極低的 HashCode!(即使真重複有另一個機制可區別...) 所以 Delphi 用了兩年了我還不知道有沒有這樣的函式或元件真是慚愧,希望有人能指點我一下,謝謝! JackTasy
TurboPower 的 sysTools 元件集中有個 TstHashTable,你或者可以試試看。 請參考 http://sourceforge.net/projects/tpsystools/
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-13 17:36:43 IP:61.220.xxx.xxx 未訂閱
引言: 我看你自己寫比較快,Java 的 hashcode 乃是基於其資料是 string, 而且書上這麼說,你該不會全相信吧!反正 Hash 這不是什麼難的觀念,自己寫應該不是問題,而且配合你的資料特性來寫,會比較方便處理,至少碰撞可以減到最低,如果應試要找個別人寫好的東西,那你的資料性質勢必要去配合,如果無法配合,那你豈不又要傷腦筋!
首先感謝 syntax 的撥空指教。我提出幾點我的想法: 1.『Thinking in Java』是一本很棒的書,我研究相關範例讓我覺得很棒,希望能在Delphi 上實做出類似的功能。 2.Hash 雜湊法對我來說真的有點難,所以希望能有現成函式或元件可以直接使用而非自己再花時間研究規則來自行撰寫。 3.當然我想過自己寫一個換算規則,但因實際資料變化很大且難預測,所以算出的值可能也會差距很大,這樣一來若用陣列的話就必須也宣告很大才足夠。所以希望能用雜湊法或其他方法來實驗看看重複率等。 (ps:Thinking in Java 用取餘數來限制索引位置一定落於某一個範圍,我想這可能是無可避免的做法) 是否可請問你在處理耗資源的 TDataSet.Locate 需求時是否如你上所敘述一樣自己編碼算出位置呢,還是...?? 謝謝! JackTasy
------
JackTasy
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-13 17:40:43 IP:61.220.xxx.xxx 未訂閱
引言: TurboPower 的 sysTools 元件集中有個 TstHashTable,你或者可以試試看。 請參考 http://sourceforge.net/projects/tpsystools/
感謝 justimchung 兄的推薦,我會好好研究一下...! JackTasy
------
JackTasy
justimchung
一般會員


發表:0
回覆:4
積分:0
註冊:2003-05-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-14 00:12:06 IP:163.28.xxx.xxx 未訂閱
引言: 首先感謝 syntax 的撥空指教。我提出幾點我的想法: 1.『Thinking in Java』是一本很棒的書,我研究相關範例讓我覺得很棒,希望能在Delphi 上實做出類似的功能。 2.Hash 雜湊法對我來說真的有點難,所以希望能有現成函式或元件可以直接使用而非自己再花時間研究規則來自行撰寫。 3.當然我想過自己寫一個換算規則,但因實際資料變化很大且難預測,所以算出的值可能也會差距很大,這樣一來若用陣列的話就必須也宣告很大才足夠。所以希望能用雜湊法或其他方法來實驗看看重複率等。 (ps:Thinking in Java 用取餘數來限制索引位置一定落於某一個範圍,我想這可能是無可避免的做法) 是否可請問你在處理耗資源的 TDataSet.Locate 需求時是否如你上所敘述一樣自己編碼算出位置呢,還是...?? 謝謝! JackTasy
個人也同意 syntax 大的說法,實際上而言,因為資料是自己在處理, 通常資料的特性自己也比較瞭解,所以應該蠻容易設計出一個不會產 生碰撞的 hash function 才是。(當然這是指大部分的情況啦,有時候 不一定成立) 另外用 hash 的話,應該都是用空間換取時間,這個時候記憶體的多少就 蠻重要的了。 我很久前看過一篇文章,他的主題是如何加速 dataset.locate ,不過他的 解法是資料由資料庫中取出來時,先排序過,之後用binary search 來搞定。 我是沒看過 locate 的演算法是如何,不過如果是用循序 search 的話,那 麼用 binary search 來解決不失為一個好方法。
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-15 15:00:10 IP:211.76.xxx.xxx 未訂閱
引言: 個人也同意 syntax 大的說法,實際上而言,因為資料是自己在處理, 通常資料的特性自己也比較瞭解,所以應該蠻容易設計出一個不會產 生碰撞的 hash function 才是。(當然這是指大部分的情況啦,有時候 不一定成立) 另外用 hash 的話,應該都是用空間換取時間,這個時候記憶體的多少就 蠻重要的了。 我很久前看過一篇文章,他的主題是如何加速 dataset.locate ,不過他的 解法是資料由資料庫中取出來時,先排序過,之後用binary search 來搞定。 我是沒看過 locate 的演算法是如何,不過如果是用循序 search 的話,那 麼用 binary search 來解決不失為一個好方法。
嗯,若自訂編碼規則的確能得到最佳掌控性,但問題卡在沒有一定的資料編碼碼規則,所以未來資料面變化不得而知...。我還在思考最後決定... 另外 BinarySearch 我只有在 Java Container 裡看過提供此 Method,Delphi TDataSet 好像沒有提供此 method 吧!?? JackTasy
------
JackTasy
JackTasy
初階會員


發表:22
回覆:97
積分:28
註冊:2002-06-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-17 10:37:28 IP:61.220.xxx.xxx 未訂閱
嗯,經過一段時間思考,我想還是採用 syntax 建議。 因為轉成hashCode 並不是最關鍵問題,實際資料面因為數值部分也很大,超過Dyna Array可宣告範圍,所以又必須花很大功夫想一個機制切割資料... 感謝兩位大大撥空指教。
------
JackTasy
系統時間:2024-05-02 7:40:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!