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:

Java Program to Check Cycle in a Graph using Graph traversal
What is Thread-Safety and How to Achieve it?
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Java Program to Perform Searching Based on Locality of Reference
Hướng dẫn sử dụng String Format trong Java
Spring Cloud Series – The Gateway Pattern
Hướng dẫn Java Design Pattern – Facade
Registration – Password Strength and Rules
Java 8 Stream findFirst() vs. findAny()
Java Program to Generate Random Numbers Using Multiply with Carry Method
Java Program to Represent Graph Using Adjacency List
Guide to the Synchronized Keyword in Java
Java Program to Implement Fenwick Tree
Spring WebClient and OAuth2 Support
Introduction to Spliterator in Java
Convert XML to JSON Using Jackson
Java Program to Generate Randomized Sequence of Given Range of Numbers
Toán tử trong java
Java Program to Give an Implementation of the Traditional Chinese Postman Problem
Java 8 – Powerful Comparison with Lambdas
Jackson – JsonMappingException (No serializer found for class)
Lập trình đa luồng với Callable và Future trong Java
New Features in Java 11
Exploring the Spring Boot TestRestTemplate
Handling URL Encoded Form Data in Spring REST
Compare Two JSON Objects with Jackson
Java String to InputStream
SOAP Web service: Authentication trong JAX-WS
Feign – Tạo ứng dụng Java RESTful Client
Java Program to Implement Singly Linked List
Fixing 401s with CORS Preflights and Spring Security
Jackson Ignore Properties on Marshalling