본문 바로가기

[IT/Programming]/Algorithm/Database

이진 탐색 트리 (Binary Search Tree, BST) 의 중위 순회 (Inorder), 전위 순회 (Preorder), 후위 순회 (Postorder) 에 대해 알아보자. # 이진 탐색 트리 (Binary Search Tree, BST) 의 중위 순회 (Inorder), 전위 순회 (Preorder), 후위 순회 (Postorder) 에 대해 알아보자. 먼저, 이진 탐색 트리(Binary Search Tree, BST)는 다음과 같은 특성을 가지는 이진 트리입니다: 각 노드는 최대 두 개의 자식 노드를 가질 수 있습니다. 왼쪽 서브트리의 모든 노드는 해당 노드보다 작거나 같은 값을 가지며, 오른쪽 서브트리의 모든 노드는 해당 노드보다 큰 값을 가집니다. ```[.linenums.lang-py] class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left sel.. 더보기
Regular Expression (정규 표현식), and match/replace method in JavaScript, JAVA, and Python # Regular Expression (정규 표현식), and match/replace method in JavaScript, JAVA, and Python 정규 표현식 테스트. replace, match, split 등에 쓰임. 꽤나 유용. 새로운 프로그래밍 언어(?)를 만들때에도 필수적으로 쓰일듯한. JavaScript 말고도 대부분의 언어 (Java, C, C++, LabVIEW, PHP, Perl 등등등) 에서 이런게 다들 비슷하게 구현되어 있음. 그런데 비슷하긴한데, 다들 조금씩은 달라서 헷갈리는게 많긴 한듯. 특히 JAVA, Python 이... JavaScript 가 제일 깔끔한듯한 느낌적인 느낌. ## PH 2024-02-24 : Python 추가. 2024-01-07 : Small edi.. 더보기
Data ENCRYPT (정보 암호화) # Data ENCRYPT (정보 암호화) 여러군데에 쓰이는 데이터 암호화. 암호를 암호화해서 저장할때도 쓰이고. 개인정보 보호할때도 쓰이고. 통신을 암호화하고 싶을때에도 쓰이고. 단방향 암호화 (원래의 정보를 확인할 필요가 없는 경우) 는 그냥 hash function 쓰면 되는듯도. 보통 단방향 암호화는 input 이 예전 input 과 일치하는지를 확인하는 용도로 자주 쓰이는듯. (즉 password 확인 같은거.) ## PH 2014-12-21: 예전에 썼던 글이긴 한데, 조금 더 정리해서 posting. ## TOC ## In MySQL MySQL 에서의 암호화 . 대충만 정리. ```[.scrollable.lang-sql] DROP TABLE IF EXISTS `TestUsers`; CREAT.. 더보기
Number to Hex string (16), and vice versa (Hex string (16) to Number) # Number to Hex string (16), and vice versa (Hex string (16) to Number) 숫자를 문자로 처리해야 할때랑, 문자로 쓰여진 숫자를 숫자데이터 형태로 바꿔야 할때가 많은데... 이런게 많을경우, 추가로 사람이 굳이 읽을 필요가 없는 경우, Hex (16진수) 로 다루면 처리속도가 조금이나마 향상될거라 생각되므로 정리해봄. ## TOC ## In JAVA ```[.linenums.lang-java] long yourNumber=0x2aff; // 11007 (10진수) String hexString=Long.toHexString(yourNumber); // for unsigned String hexString=Long.toString(yourNumber, .. 더보기
Learning SQL (Structured Query Language) | MySQL (SQL | MySQL 을 배워보자.) :: MySQL, JDBC (Java DataBase Connector) # Learning SQL (Structured Query Language) | MySQL (SQL | MySQL 을 배워보자.) :: MySQL, JDBC (Java DataBase Connector) Database library라고 보면 될듯. 공부하면서 정리해놨던 것 포스팅. 정말 최적화하려면 상용 SQL보다 직접 database를 구축해서 쓰는게 (search에 hash를 쓸 것인지, tree를 쓸 것인지 등도 결정하면서) 프로그램이 돌아갈 때 더 적은 resource와 더 적은 시간이 걸릴거 같지만, 오래 걸리고 노력을 많이 필요로하니 그냥 보급된 SQL을 잘 골라서 쓰는게 맘 편할듯도. Select, Join 같은거 구현하려면 짱나긴 할듯. 정리하기 귀찮다;;;; 대충만 해놓고 다음에 다시... 더보기
Machine Learninig :: Fastest learning by Quadratic approximation approach with finite equal step size through steepest descent. # Machine Learninig :: Fastest learning by Quadratic approximation approach with finite equal step size through steepest descent. 기계학습 코드를 짜는건 최적화 문제와 관련이 있는데 이 최적화라는게 the method of Lagrange multipliers (라그랑지 승수법) 과 밀접한 관련이 있다. 보통 질문 (input) 과 정답 (output) set 를 왕창 준비한 다음 Machine Learning code (Deep Learning with Artificial Neural Networks) 로 특정 변수들 집합일 때 (처음에는 Initial guess 로 거의 무작위한 값을 넣는 경우가 많.. 더보기
RSA 암호가 Big brother (국가기관 및 최상위 계급층들) 들에게 쉽게 깨지는 이유. (보안이 안되는 이유.) # RSA 암호가 Big brother (국가기관 및 최상위 계급층들) 들에게 쉽게 깨지는 이유. (보안이 안되는 이유.) 큰 수의 소인수 분해가 어렵다는 것을 이용한 것이 RSA 암호인데, 애초에 소수를 찾는 것 부터 시작해서 두 소수의 곱을 알아내고 소수에 대한 정보는 지운다는게 핵심인데... 잘 생각해보면 소수에 대한 정보를 절대 안지울거라는걸 알 수 있음. 그냥 Hash Rainbow Table 로 두 소수의 곱셈 = A, B 의 곱 이라고 만들어 놓으면 어떠한 두 큰 소수의 곱도 어떻게 소인수 분해 해야 하는지 order(1) 만에 알 수 있음. 그래서 난 RSA 암호체계를 안믿음. 그냥 일반 사람들이 해킹하기 조금 어렵다 뿐. 두 소수의 곱을 모두 데이터화 한 국가나 최상위 계층 (대기업 CE.. 더보기
한글 초성검색 in Javascript # 한글 초성검색 in Javascript 한글의 위대함을 한껏 활용하기 위해 초성검색을 구현해 봅시다. 문서 오른쪽 위의 Fuzzy search 버튼을 누르시면, 초성검색 (엄밀히는 fuzzy search 이지만) 구현이 어떻게 되어 있는지 아실 수 있습니다. ## TOC ## 한글 Encoding in Javascript 자바스크립트의 문자열은 내부적으로 16비트 유니코드로 처리 . 유니코드에서 한글은 코드값 OxAC00부터 시작하며, 초성 19 / 중성 21 / 종성 28 개의 조합 순으로 코드가 배열. 유니코드에 대한 공식 설명은 에서... 초성, 중성, 종성의 자모 순서는 에서... (Hangul Syllables 부분에 한글 음절에 대한 유니코드표) Hangul Array 초성 "ㄱ", "ㄲ".. 더보기