Skip to content

Commit 80253f2

Browse files
committed
Trie: Insert and Find working
1 parent 864a2d8 commit 80253f2

File tree

9 files changed

+349
-0
lines changed

9 files changed

+349
-0
lines changed

Trie/AssemblyInfo.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Reflection;
2+
using System.Runtime.CompilerServices;
3+
4+
// Information about this assembly is defined by the following attributes.
5+
// Change them to the values specific to your project.
6+
7+
[assembly: AssemblyTitle("Trie")]
8+
[assembly: AssemblyDescription("")]
9+
[assembly: AssemblyConfiguration("")]
10+
[assembly: AssemblyCompany("")]
11+
[assembly: AssemblyProduct("")]
12+
[assembly: AssemblyCopyright("root")]
13+
[assembly: AssemblyTrademark("")]
14+
[assembly: AssemblyCulture("")]
15+
16+
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17+
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
18+
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
19+
20+
[assembly: AssemblyVersion("1.0.*")]
21+
22+
// The following attributes are used to specify the signing key for the assembly,
23+
// if desired. See the Mono documentation for more information about signing.
24+
25+
//[assembly: AssemblyDelaySign(false)]
26+
//[assembly: AssemblyKeyFile("")]
27+

Trie/Main.cs

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
using
2+
3+
System;
4+
5+
namespace
6+
7+
Trie
8+
{
9+
10+
class MainClass
11+
{
12+
13+
public static void Main(string[] args)
14+
{
15+
16+
Trie thing = new Trie();
17+
18+
string hol = "HOLA";
19+
20+
thing.Insert(hol,5);
21+
22+
Console.WriteLine(hol);
23+
24+
25+
Console.WriteLine("Char VAL!: " + thing.Find(hol) );
26+
27+
}
28+
29+
}
30+
31+
class Trie
32+
{
33+
// tamaño del Trie
34+
35+
int size;
36+
37+
// Se crea un arreglo de 26
38+
39+
// que representarán las letras del abecedario
40+
TrieNode root = new TrieNode();
41+
42+
43+
public Trie()
44+
{
45+
// J posee el valor ascii de la primera letra del abecedario en mayuscula
46+
47+
48+
/* int j = 65;
49+
char xs;
50+
// Genera todas las letras de 'A' hasta 'Z'
51+
/* for (int i = 0; i < 26; i++)
52+
{
53+
54+
ar[i] = new TrieNode(j, j);
55+
xs = Convert.ToChar(j);
56+
57+
Console.WriteLine(xs);
58+
j++;
59+
60+
}*/
61+
62+
for (int i = 0; i < 26; i++) {
63+
root.ar[i] = new TrieNode('_',0);
64+
}
65+
66+
}
67+
68+
public void Insert(string word, int _val)
69+
{
70+
// se inserta una palabra dentro del Trie
71+
// Se hace una variable temporal que tome a la palabra introducida
72+
73+
string temp = word;
74+
75+
// SE toma cur como la raiz en donde comenzara a preguntar
76+
77+
TrieNode cur = root;
78+
//
79+
80+
81+
while (temp.Length != 0)
82+
{
83+
84+
// busca la primera letra de la palabra introducida
85+
86+
// y entra en el nodo de aquella primera letra para ir iterando hasta
87+
88+
// confirmar que se ha encontrado toda la palabar
89+
90+
91+
// Toma el primer caracter de la palabra
92+
char chr = Convert.ToChar( temp.Substring(0, 1));
93+
94+
int idx = chr - 65;
95+
Console.WriteLine( temp.Substring(0, 1) + " "+ chr + " " + idx);
96+
97+
Console.ReadLine ();
98+
99+
// me interesaria insertar en esa posicion que me estan dando!?
100+
101+
// Las 3 formas de hacerlo segun yo son: tomando el valor donde deberia ir y preguntar si esta nulo
102+
// Llenando todo el arreglo con el alfabeto, o con algun caracter para identificar que no ha sido usado.
103+
// use la ultima
104+
//Console.WriteLine(cur.ar[idx].key);
105+
if ( cur.ar[idx] == null )
106+
{
107+
cur.ar[idx] = new TrieNode (chr,_val);
108+
cur = cur.ar[idx];
109+
110+
111+
// Si en este nodo de Trie, el valor buscado no es igual al dado por la letra
112+
// Crea ese nodo en esa posicion
113+
// Se resta 65 para obtener el indice de la posicion de la letra a donde deberia estar la que se va a insertar
114+
// Si no existe se nodo, crea el nodo y continua
115+
116+
} else
117+
{
118+
119+
120+
Console.WriteLine(chr);
121+
cur.ar[idx] = new TrieNode(chr,_val);
122+
cur = cur. ar[idx];
123+
// de lo contrario, si existe, entra a ese nodo
124+
125+
126+
}
127+
128+
temp = temp.Remove(0,1);
129+
size++;
130+
131+
}
132+
133+
134+
}
135+
136+
public int Find(string word)
137+
{
138+
139+
// Se hace una variable temporal que tome a la palabra introducida
140+
141+
string temp = word;
142+
143+
// SE toma cur como la raiz en donde comenzara a preguntar
144+
145+
TrieNode cur = root;
146+
//
147+
int chr;
148+
149+
while (temp.Length != 0)
150+
{
151+
152+
// busca la primera letra de la palabra introducida
153+
154+
// y entra en el nodo de aquella primera letra para ir iterando hasta
155+
156+
// confirmar que se ha encontrado toda la palabar
157+
158+
chr = Convert.ToChar( temp.Substring(0, 1));
159+
160+
Console.WriteLine( temp.Substring(0, 1) + " "+ chr);
161+
162+
Console.ReadLine ();
163+
164+
165+
166+
167+
if (cur.ar[chr-65] !=null)
168+
{
169+
170+
Console.WriteLine(temp.Substring(0,1)+ " = " +cur.ar[chr-65].key);
171+
172+
if(temp.Length >1)
173+
cur = cur. ar[chr-65];
174+
175+
} else
176+
return -1;
177+
178+
temp = temp.Remove(0,1);
179+
180+
}
181+
182+
// Si no encuentra la palabra
183+
184+
// devuelve 0
185+
186+
return cur.ar[chr-65].val;
187+
188+
}
189+
190+
public int Key(char _key)
191+
{
192+
193+
int i = 0;
194+
195+
for (i = 0; i < 26; i++)
196+
197+
if (_key == root.ar[i].key)
198+
{
199+
200+
Console.WriteLine(root.ar[i].key + " " + " val:! " + root.ar[i].val);
201+
202+
break;
203+
204+
}
205+
206+
// Si no encuentra la palabra
207+
208+
// devuelve 0
209+
210+
return root.ar[i].val;
211+
212+
}
213+
214+
protected void Gen()
215+
{
216+
217+
}
218+
219+
}
220+
221+
public class TrieNode
222+
{
223+
224+
public char key;
225+
226+
public int val;
227+
228+
public int size; //
229+
// sera el fin de la palabra hasta que se demuestre lo contrario
230+
public bool wordEnd=true;
231+
// hijos de Trie
232+
public TrieNode[] ar = new TrieNode[26];
233+
234+
public TrieNode()
235+
{
236+
237+
238+
//j=65;// se usa j para crear las letras de 'A' hasta 'Z'
239+
// se crean todas las letras del alfabeto sin valor alguno
240+
/*for (int i = 0; i < 26; i++) {
241+
ar[i] = new TrieNode('_', 0);
242+
Console.WriteLine(ar[i].key);
243+
}//xs = Convert.ToChar(j);
244+
*/
245+
//Console.WriteLine(xs);
246+
//j++;
247+
248+
249+
// this must be the solution but doens't work
250+
251+
for (int i = 0; i < 26; i++)
252+
ar[i] = null;
253+
254+
// J posee el valor ascii de la primera letra del abecedario en mayuscula
255+
256+
}
257+
258+
259+
260+
public TrieNode(char _key, int _val)
261+
{
262+
// J posee el valor ascii de la primera letra del abecedario en mayuscula
263+
key = _key;
264+
val = _val;
265+
size =1;
266+
}
267+
268+
public TrieNode(int _key, int _val)
269+
{
270+
key= Convert.ToChar(_key);
271+
val = _val;
272+
size = 1;
273+
}
274+
275+
}
276+
277+
}

Trie/Trie.csproj

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5+
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
6+
<ProductVersion>10.0.0</ProductVersion>
7+
<SchemaVersion>2.0</SchemaVersion>
8+
<ProjectGuid>{33D0CF9A-7E29-4A76-9BB1-B18C3517E624}</ProjectGuid>
9+
<OutputType>Exe</OutputType>
10+
<RootNamespace>Trie</RootNamespace>
11+
<AssemblyName>Trie</AssemblyName>
12+
</PropertyGroup>
13+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
14+
<DebugSymbols>true</DebugSymbols>
15+
<DebugType>full</DebugType>
16+
<Optimize>false</Optimize>
17+
<OutputPath>bin\Debug</OutputPath>
18+
<DefineConstants>DEBUG;</DefineConstants>
19+
<ErrorReport>prompt</ErrorReport>
20+
<WarningLevel>4</WarningLevel>
21+
<PlatformTarget>x86</PlatformTarget>
22+
<Externalconsole>true</Externalconsole>
23+
</PropertyGroup>
24+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
25+
<DebugType>none</DebugType>
26+
<Optimize>false</Optimize>
27+
<OutputPath>bin\Release</OutputPath>
28+
<ErrorReport>prompt</ErrorReport>
29+
<WarningLevel>4</WarningLevel>
30+
<PlatformTarget>x86</PlatformTarget>
31+
<Externalconsole>true</Externalconsole>
32+
</PropertyGroup>
33+
<ItemGroup>
34+
<Reference Include="System" />
35+
</ItemGroup>
36+
<ItemGroup>
37+
<Compile Include="Main.cs" />
38+
<Compile Include="AssemblyInfo.cs" />
39+
</ItemGroup>
40+
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
41+
</Project>

Trie/Trie.pidb

7.74 KB
Binary file not shown.

Trie/bin/Debug/Trie.exe

5 KB
Binary file not shown.

Trie/bin/Debug/Trie.exe.mdb

926 Bytes
Binary file not shown.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/root/Trie/Trie/bin/Debug/Trie.exe.mdb
2+
/root/Trie/Trie/bin/Debug/Trie.exe
3+
/root/Trie/Trie/obj/x86/Debug/Trie.exe
4+
/root/Trie/Trie/obj/x86/Debug/Trie.exe.mdb

Trie/obj/x86/Debug/Trie.exe

5 KB
Binary file not shown.

Trie/obj/x86/Debug/Trie.exe.mdb

926 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)