Java Program to Perform Searching Using Self-Organizing Lists

This is a java program to search an element using Self Organizing lists. A self-organizing list is a list that reorders its elements based on some self-organizing heuristic to improve average access time. The aim of a self-organizing list is to improve efficiency of linear search by moving more frequently accessed items towards the head of the list. A self-organizing list achieves near constant time for element access in the best case. A self-organizing list uses a reorganizing algorithm to adapt to various query distributions at runtime.

Here is the source code of the Java Program to Perform Searching Using Self-Organizing Lists. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is a java program to search an element in self organizing lists
import java.util.Random;
import java.util.Scanner;
 
class SelfOrganizingList 
{
    private int[] list;
    private int[] count;
    private int size;
 
    public SelfOrganizingList(int listSize) 
    {
        list = new int[listSize];
        count = new int[listSize];
        size = 0;
    }
 
    public boolean isEmpty() 
    {
        return size == 0;
    }
 
    public boolean isFull() 
    {
        return size == list.length;
    }
 
    public void makeEmpty() 
    {
        int l = list.length;
        list = new int[l];
        count = new int[l];
        size = 0;
    }
 
    public int getSize() 
    {
        return size;
    }
 
    public void insert(int val) 
    {
        if (isFull()) 
        {
            System.out.println("Error : List full!");
            return;
        }
        list[size] = val;
        count[size] = 0;
        size++;
    }
 
    public void remove(int pos) 
    {
        pos--;
        if (pos < 0 || pos >= size) 
        {
            System.out.println("Invalid position ");
            return;
        }
        for (int i = pos; i < size - 1; i++) 
        {
            list[i] = list[i + 1];
            count[i] = count[i + 1];
        }
        size--;
    }
 
    public boolean search(int x) 
    {
        boolean searchResult = false;
        int pos = -1;
        for (int i = 0; i < size; i++) 
        {
            if (list[i] == x) {
                searchResult = true;
                pos = i;
                break;
            }
        }
        if (searchResult) 
        {
            count[pos]++;
            int c = count[pos];
            for (int i = 0; i < pos; i++) 
            {
                if (count[pos] > count[i]) 
                {
                    for (int j = pos; j > i; j--) 
                    {
                        list[j] = list[j - 1];
                        count[j] = count[j - 1];
                    }
                    list[i] = x;
                    count[i] = c;
                    break;
                }
            }
        }
        return searchResult;
    }
 
    public void printList() 
    {
        System.out.print("\nList = ");
        for (int i = 0; i < size; i++)
            System.out.print(list[i] + " ");
        System.out.print("\nCount = ");
        for (int i = 0; i < size; i++)
            System.out.print(count[i] + " ");
    }
}
 
public class Search_Self_Organizing 
{
    public static void main(String[] args) 
    {
        Random random = new Random();
        int N = 20;
 
        SelfOrganizingList list = new SelfOrganizingList(N);
        for (int i = 0; i < N; i++)
            list.insert(Math.abs(random.nextInt(1000)));
 
        Scanner scan = new Scanner(System.in);
        System.out.println("SelfOrganizingList Searching \n");
 
        list.printList();
 
        System.out.println("\nEnter integer element to search");
        System.out.println("Search Result : " + list.search(scan.nextInt()));
 
        scan.close();
    }
}

Output:

$ javac Search_Self_Organizing.java
$ java Search_Self_Organizing
 
SelfOrganizingList Searching 
 
List = 855 318 462 851 373 360 811 401 813 50 291 346 707 118 633 217 715 594 999 99 
Count = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
Enter integer element to search
811
Search Result : true

Related posts:

Iterable to Stream in Java
Java Program to Implement Quick Hull Algorithm to Find Convex Hull
Java Program to Implement Gauss Seidel Method
Một số từ khóa trong Java
How to Round a Number to N Decimal Places in Java
Java Program to Implement Bucket Sort
Java Program to Solve TSP Using Minimum Spanning Trees
Java Program to Implement Tarjan Algorithm
Java Program to Implement the Checksum Method for Small String Messages and Detect
Spring Boot Tutorial – Bootstrap a Simple Application
Java Program to Describe the Representation of Graph using Adjacency List
Java Web Services – JAX-WS – SOAP
Custom Error Pages with Spring MVC
Java Program to Implement Interpolation Search Algorithm
Java Program to Check the Connectivity of Graph Using DFS
Converting a Stack Trace to a String in Java
Java Program to Implement ArrayBlockingQueue API
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Java Program to Perform Searching Based on Locality of Reference
Java Program to Check whether Graph is a Bipartite using DFS
Spring’s RequestBody and ResponseBody Annotations
Spring Security Registration – Resend Verification Email
Các chương trình minh họa sử dụng Cấu trúc điều khiển trong Java
Spring WebFlux Filters
Apache Commons Collections OrderedMap
Java Program to Implement Park-Miller Random Number Generation Algorithm
Tránh lỗi NullPointerException trong Java như thế nào?
Guide to System.gc()
Java Program to Find Transitive Closure of a Graph
Spring Security 5 – OAuth2 Login
Truyền giá trị và tham chiếu trong java
Guide to Java Instrumentation