Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
KStarCache.java
Package: Weka-3-2.rar [view]
Upload User: rhdiban
Upload Date: 2013-08-09
Package Size: 15085k
Code Size: 8k
Category:
Windows Develop
Development Platform:
Java
- /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
- /**
- * KStarCache.java
- * Copyright (c) 1995-97 by Len Trigg (trigg@cs.waikato.ac.nz).
- * Java port to Weka by Abdelaziz Mahoui (am14@cs.waikato.ac.nz).
- *
- */
- package weka.classifiers.kstar;
- import java.util.*;
- /**
- * A class representing the caching system used to keep track of each attribute
- * value and its corresponding scale factor or stop parameter.
- *
- * @author Len Trigg (len@intelligenesis.net)
- * @author Abdelaziz Mahoui (am14@cs.waikato.ac.nz)
- * @version $Revision 1.0 $
- */
- public class KStarCache {
- /**
- * cache table
- */
- CacheTable m_Cache = new CacheTable();
- /**
- * Stores the specified values in the cahce table for easy retrieval.
- *
- * @param key attribute value used key to lookup the cache table.
- * @param value cache parameter: attribute scale/stop parameter.
- * @param pmiss cache parameter: transformation probability to
- * attribute with missing value.
- */
- public void store(double key, double value, double pmiss) {
- if ( !m_Cache.containsKey(key) ) {
- m_Cache.insert(key, value, pmiss);
- }
- }
- /**
- * Checks if the specified key maps with an entry in the cache table
- *
- * @param key the key to map with an entry in the hashtable.
- */
- public boolean containsKey(double key) {
- if ( m_Cache.containsKey(key) ) {
- return true;
- }
- return false;
- }
- /**
- * Returns the values in the cache mapped by the specified key
- *
- * @param key the key used to retrieve the table entry.
- */
- public TableEntry getCacheValues( double key ) {
- if ( m_Cache.containsKey(key) ) {
- return m_Cache.getEntry(key);
- }
- return null;
- }
- /**
- * A custom hashtable class to support the caching system.
- *
- */
- public class CacheTable {
- /** The hash table data. */
- private transient TableEntry [] m_Table;
- /** The total number of entries in the hash table. */
- private transient int m_Count;
- /** Rehashes the table when count exceeds this threshold. */
- private int m_Threshold;
- /** The load factor for the hashtable. */
- private float m_LoadFactor;
- /** The default size of the hashtable */
- private final int DEFAULT_TABLE_SIZE = 101;
- /** The default load factor for the hashtable */
- private final float DEFAULT_LOAD_FACTOR = 0.75f;
- // private final float DEFAULT_LOAD_FACTOR = 0.5f;
- /** Accuracy value for equality */
- private final double EPSILON = 1.0E-5;
- /**
- * Constructs a new hashtable with a default capacity and load factor.
- */
- public CacheTable(int size, float loadFactor) {
- m_Table = new TableEntry[size];
- m_LoadFactor = loadFactor;
- m_Threshold = (int)(size * loadFactor);
- m_Count = 0;
- }
- /**
- * Constructs a new hashtable with a default capacity and load factor.
- */
- public CacheTable() {
- this(101, 0.75f);
- }
- /**
- * Tests if the specified double is a key in this hashtable.
- */
- public boolean containsKey(double key) {
- TableEntry [] table = m_Table;
- int hash = hashCode(key);
- int index = (hash & 0x7FFFFFFF) % table.length;
- for (TableEntry e = table[index] ; e != null ; e = e.next) {
- if ((e.hash == hash) && (Math.abs(e.key - key) < EPSILON)) {
- return true;
- }
- }
- return false;
- }
- /**
- * Inserts a new entry in the hashtable using the specified key.
- * If the key already exist in the hashtable, do nothing.
- */
- public void insert(double key, double value, double pmiss) {
- // Makes sure the key is not already in the hashtable.
- TableEntry e, ne;
- TableEntry [] table = m_Table;
- int hash = hashCode(key);
- int index = (hash & 0x7FFFFFFF) % table.length;
- // start looking along the chain
- for (e = table[index] ; e != null ; e = e.next) {
- if ((e.hash == hash) && (Math.abs(e.key - key) < EPSILON)) {
- return;
- }
- }
- // At this point, key is not in table.
- // Creates a new entry.
- ne = new TableEntry( hash, key, value, pmiss, table[index] );
- // Put entry at the head of the chain.
- table[index] = ne;
- m_Count++;
- // Rehash the table if the threshold is exceeded
- if (m_Count >= m_Threshold) {
- rehash();
- }
- }
- /**
- * Returns the table entry to which the specified key is mapped in
- * this hashtable.
- * @return a table entry.
- */
- public TableEntry getEntry(double key) {
- TableEntry [] table = m_Table;
- int hash = hashCode(key);
- int index = (hash & 0x7FFFFFFF) % table.length;
- for (TableEntry e = table[index] ; e != null ; e = e.next) {
- if ((e.hash == hash) && (Math.abs(e.key - key) < EPSILON)) {
- return e;
- }
- }
- return null;
- }
- /**
- * Returns the number of keys in this hashtable.
- * @return the number of keys in this hashtable.
- */
- public int size() {
- return m_Count;
- }
- /**
- * Tests if this hashtable maps no keys to values.
- * @return true if this hastable maps no keys to values.
- */
- public boolean isEmpty() {
- return m_Count == 0;
- }
- /**
- * Clears this hashtable so that it contains no keys.
- */
- public void clear() {
- TableEntry table[] = m_Table;
- for (int index = table.length; --index >= 0; ) {
- table[index] = null;
- }
- m_Count = 0;
- }
- /**
- * Rehashes the contents of the hashtable into a hashtable with a
- * larger capacity. This method is called automatically when the
- * number of keys in the hashtable exceeds this hashtable's capacity
- * and load factor.
- */
- private void rehash() {
- int oldCapacity = m_Table.length;
- TableEntry [] oldTable = m_Table;
- int newCapacity = oldCapacity * 2 + 1;
- TableEntry [] newTable = new TableEntry[newCapacity];
- m_Threshold = (int)(newCapacity * m_LoadFactor);
- m_Table = newTable;
- TableEntry e, old;
- for (int i = oldCapacity ; i-- > 0 ;) {
- for (old = oldTable[i] ; old != null ; ) {
- e = old;
- old = old.next;
- int index = (e.hash & 0x7FFFFFFF) % newCapacity;
- e.next = newTable[index];
- newTable[index] = e;
- }
- }
- }
- /**
- * Returns the hash code of the specified double.
- * @return the hash code of the specified double.
- */
- private int hashCode(double key) {
- long bits = Double.doubleToLongBits(key);
- return (int)(bits ^ (bits >> 32));
- }
- } // CacheTable
- /**
- * Hashtable collision list.
- */
- public class TableEntry {
- /** attribute value hash code */
- public int hash;
- /** attribute value */
- public double key;
- /** scale factor or stop parameter */
- public double value;
- /** transformation probability to missing value */
- public double pmiss;
- /** next table entry (separate chaining) */
- public TableEntry next = null;
- /** Constructor */
- public TableEntry(int hash, double key, double value,
- double pmiss, TableEntry next) {
- this.hash = hash;
- this.key = key;
- this.value = value;
- this.pmiss = pmiss;
- this.next = next;
- }
- } // TableEntry
- } // Cache