루아 알고리즘 라이브러리 lua-algorithms

루아 알고리즘 라이브러리 lua-algorithms stack queue tree

 

This library was developed with the purpose of making general algorithms and data structures available in Java language also available in Lua.

Features

The library covers commonly used data structures (ArrayList, Stack, Queue, Priority Queue, Balanced Search Tree, HashMap, Set, Tries) and algorithms (various sorting and search algorithms, shuffling, union find, etc)

For developers on Windows platform, a Vagrantfile is provided in the source code to allow them to run luarocks under window environment.

Install

luarocks install lualgorithms

Usage

Common Data Structures

Stack

local stack = require 'lualgorithms.data.stack'

local s = stack.create()
s:push(1)
s:push(2)
s:push(3)
print(s:size())
print(s:isEmpty())
print(s:pop())
for index,val in pairs(s:enumerate()) do
    print(index, val)
end

ArrayList

The list behaves the same as the Java ArrayList API, and is zero-based indexing.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

local list = require 'lualgorithms.data.list'

local s = list.create()
s:add(1) -- s becomes [1]
s:add(2) -- s becomes [1, 2]
s:add(3) -- s becomes [1, 2, 3]
s:set(2, 4) -- s becomes [1, 2, 4]

for index,val in pairs(s:enumerate()) do
    print(index, val)
end
for i = 0,s:size()-1 do
    print(s:get(i))
end
print(s:size())
print(s:isEmpty())
s:removeAt(0) -- s becomes [2, 4]
s:remove(2) -- s becomes [4]
s:removeAt(0) -- s is now empty

Queue

 local queue = require('lualgorithms.data.queue')
local s = queue.create()
s:enqueue(10)
s:enqueue(20)
s:enqueue(30)
print(s:size()) -- return 3
print(s:isEmpty()) -- return false
for key,value in pairs(s:enumerate()) do
    print(key, value)
end
print(s:dequeue()) -- return 10
print(s:dequeue()) -- return 20
print(s:dequeue()) -- return 30

MinPQ

local minpq = require('lualgorithms.data.minpq')
local comparer = function(a1, a2) return a1 - a2 end -- method that return negative value if if a1 < a2; 0 if a1 == a2; positive otherwise
local s = minpq.create(comparer)
s:enqueue(10)
s:enqueue(100)
s:enqueue(20)
s:enqueue(50)
print(s:size()) -- return 4
print(s:isEmpty()) -- return false

print(s:delMin()) -- return 10
print(s:delMin()) -- return 20
print(s:delMin()) -- return 50
print(s:delMin()) -- return 100

print(s:isEmpty()) -- return true

MaxPQ

local maxpq = require('lualgorithms.data.maxpq')
local comparer = function(a1, a2) return a1 - a2 end -- method that return negative value if if a1 < a2; 0 if a1 == a2; positive otherwise
local s = maxpq.create(comparer)
s:enqueue(10)
s:enqueue(100)
s:enqueue(20)
s:enqueue(50)
print(s:size()) -- return 4
print(s:isEmpty()) -- return false

print(s:delMax()) -- return 100
print(s:delMax()) -- return 50
print(s:delMax()) -- return 20
print(s:delMax()) -- return 10

print(s:isEmpty()) -- return true

HashSet

local hashset = require('lualgorithms.data.hashset')
local hash_func = function(x) return x % 1000 end
local s = hashset.create(hash_func)
s:add(100, 2)
s:add(200, 4)
s:add(450, 2)

print(s:contains(99)) -- return false
print(s:contains(100)) -- return true
print(s:size()) -- return 3
print(s:isEmpty()) -- return false
s:remove(100)
print(s:contains(100)) -- return false)

HashMap

local hashmap = require('lualgorithms.data.hashmap')
local hash_func = function(x) return x % 1000 end
local s = hashmap.create(hash_func)
s:put(100, 2)
s:put(200, 4)
s:put(450, 2)
print(s:get(100)) -- return  2
print(s:get(200)) -- return  4
print(s:get(450)) -- return  2
print(s:get(99)) -- return  nil
print(s:containsKey(99)) -- return  false
print(s:containsKey(100)) -- return  true
print(s:size()) -- return  3
print(s:isEmpty()) -- return  false
print(s:remove(100)) -- return  2
print(s:containsKey(100)) -- return  false
print(s:size()) -- return  2
s:remove(200)
s:remove(450)
print(s:isEmpty()) -- return  true

SortedMap (Left-Leaning Red Black Tree)

local map = require('lualgorithms.data.redblacktree')
local comparator = function(a1, a2) return a1 - a2 end
local s = map.create(comparator)
s:put(100, 2)
s:put(200, 4)
s:put(450, 2)
print(s:minKey()) -- return 100
print(s:maxKey()) -- return 450
print(s:get(100)) -- return  2
print(s:get(200)) -- return  4
print(s:get(450)) -- return  2
print(s:get(99)) -- return  nil
print(s:containsKey(99)) -- return  false
print(s:containsKey(100)) -- return  true
print(s:size()) -- return  3
print(s:isEmpty()) -- return  false
print(s:remove(100)) -- return  2
print(s:containsKey(100)) -- return  false
print(s:size()) -- return  2
s:remove(200)
s:remove(450)
print(s:isEmpty()) -- return  true

Tries (R-way Tries)

local rwaytries = require('lualgorithms.tries.rwaytries')
local s = rwaytries.create()

s:put("Hello", "World")
s:put("Hi", "Morning")
s:put("How", "are you?")

print(s:isEmpty()) -- return false
print(s:size()) -- return 3

print(s:get("Hello")) -- return "World"
print(s:get("Hi")) -- return "Morning"
print(s:get("How")) -- return "are you?"
print(s:containsKey("Hello")) -- return true
print(s:containsKey("hello")) -- return false

s:remove("Hello")

print(s:containsKey("Hello")) -- return false
print(s:size()) -- return 2

local keys = s:keys()
for i=0, keys:size()-1 do
    print(keys:get(i))
end

s:put('there', 'is')
s:put('the', 'ninja')
s:put('those', 'turtles')
s:put('these', 'ducks')
s:put('turles', 'ducks')
keys = s:keysWithPrefix('th')
for i=0, keys:size()-1 do
    print(keys:get(i))
end

Sorting

As in Java, the sorting is performed on ArrayList by default (which is lualgorithms.data.list).

Note that the default is to sort ascendingly, which can be reversed via the comparator function pass in as the second parameter.

Sorting (Selection Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local selection = require("lualgorithms.sorting.selection")
selection.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (Insertion Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local insertion = require("lualgorithms.sorting.insertion")
insertion.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (Shell Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local shellsort = require("lualgorithms.sorting.shellsort")
shellsort.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (Merge Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local mergesort = require("lualgorithms.sorting.mergesort")
mergesort.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (Quick Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local quicksort = require("lualgorithms.sorting.quicksort")
quicksort.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (3-ways Quick Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local quicksort3ways = require("lualgorithms.sorting.quicksort3ways")
quicksort3ways.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Sorting (Heap Sort)

local list = require("lualgorithms.data.list")
local a = list.create()
a:add(100)
a:add(200)
a:add(300)
a:add(600)
a:add(200)
a:add(400)
a:add(340)
a:add(120)
a:add(10)

local heapsort = require("lualgorithms.sorting.heapsort")
heapsort.sort(a, function(a1, a2) return a1 - a2 end)

for i=0,(a:size()-1) do
    print(a:get(i))
end

Shuffling

local list = require('lualgorithms.data.list')
local s = list.create()
for i=1,10 do
    s:add(i)
end
local shuffling = require('lualgorithms.shuffling')
shuffling.shuffle(s)
for i=0,(s:size()-1) do
    print(s:get(i))
end

Binary Search on Sorted ArrayList

local comparator = function(a1, a2) return a1 - a2 end
local s = create_a_list_that_sorts_ascendingly(comparator)

if s.isSortedAscedningly() then
    local binarysearch = require('lualgorithms.binarysearch')
    print(binarysearch.indexOf(s, 10, comparator)) -- return the index of value 10 in the array list s
else
    print('error! list must be sorted before performing binary search')    
end

Union Find

local unionfind = require('lualgorithms.unionfind').create()
unionfind:union(1, 2)
unionfind:union(4, 6)
unionfind:union(7, 4)

print(unionfind:connected(6, 7)) -- return true
print(unionfind:connected(4, 7)) -- return true
print(unionfind:connected(6, 4)) -- return true
print(unionfind:connected(6, 1)) -- return false
print(unionfind:connected(7, 2)) -- return false

lua-algorithms-master.zip

[출처] https://github.com/chen0040/lua-algorithms

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
658 인공지능이 의식을 가질 수 있는가 file 졸리운_곰 2018.03.07 96
657 당근마켓에서 딥러닝 활용하기 - 불량 게시물 검사 file 졸리운_곰 2018.03.06 130
656 머신러닝 단기집중과정 by google 졸리운_곰 2018.03.04 89
655 한글 형태소 분석의 이해 NLP file 졸리운_곰 2018.03.04 83
» 루아 알고리즘 라이브러리 lua-algorithms stack queue tree file 졸리운_곰 2018.03.03 1385
653 VB.NET 알고리즘 구현 - Stack, Queue Data Type file 졸리운_곰 2018.02.27 310
652 TopCoder 사용 방법 (탑코더 시작하기) file 졸리운_곰 2018.02.26 360
651 MXNet을 활용한 이미지 분류 앱 개발하기 file 졸리운_곰 2018.02.25 118
650 [Artificial Intelligence / MXNet] MXNet을 이용한 Classification 문제 풀기 file 졸리운_곰 2018.02.25 66
649 [Artificial Intelligence / MXNet] Windows 환경에 MXNet 설치하기 file 졸리운_곰 2018.02.25 93
648 [Artificial Intelligence / MXNet] MXNet 소개 file 졸리운_곰 2018.02.25 98
647 Blender 단축키 file 졸리운_곰 2018.02.25 156
646 Blender 단축키 정리 모음 file 졸리운_곰 2018.02.25 164
645 [자바스크립트] 선택한 이미지 base64 코드로 변환하여 화면에 보여주기 file 졸리운_곰 2018.02.21 253
644 [제목] 한번의 커넥션으로 이미지 모두 전송하는 방법 졸리운_곰 2018.02.21 101
643 data URIs로 image 생성하기 file 졸리운_곰 2018.02.21 92
642 Base64 이미지 사용하기 file 졸리운_곰 2018.02.21 111
641 html img , a에 직접 이미지, 파일 데이터 넣기 졸리운_곰 2018.02.21 110
640 BASE64 로 인코딩 한 이미지 data를 직접 HTML 문서에 추가하는 방법 외 file 졸리운_곰 2018.02.21 296
639 Torch7 따라 해 보기 file 졸리운_곰 2018.02.19 88
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED