- 100
- 486 845
Mary Elaine Califf
United States
เข้าร่วมเมื่อ 18 พ.ย. 2011
Computer Science Educational content including programming in C++ and Java, algorithms and data structures, and concepts of programming languages.
The majority of this content has been developed for the benefit of my students at my university, but I have posted it here in hopes that it will be useful to others seeking to learn.
The Linked Lists Drawing Tool linked below is a program I created to help students learn linked lists. Note that it is not mobile-friendly.
The majority of this content has been developed for the benefit of my students at my university, but I have posted it here in hopes that it will be useful to others seeking to learn.
The Linked Lists Drawing Tool linked below is a program I created to help students learn linked lists. Note that it is not mobile-friendly.
Parameter Passing Mechanisms Part 2
Explanation of macro-expansion, pass by name, and pass by need, with examples.
มุมมอง: 726
วีดีโอ
Theoretical vs Actual Program Running Time
มุมมอง 454ปีที่แล้ว
A review of algorithm analysis and a demonstration of comparing actual running times to the theoretical algorithm analysis.
Parameter Passing Mechanisms 1
มุมมอง 1.1Kปีที่แล้ว
Explanation of pass by value, pass by result, pass by value-result, and pass by reference, with some small code examples. Timestamps 00:00 - Introduction 01:08 - Pass by Value 03:40 - Pass by Result 04:46 - Pass by Result Examples 06:57 - Pass by Value Result 08:43 - Pass by Reference 11:07 - Code Examples Comparing Reference and Value-Result
Does Java Ever Pass by Reference?
มุมมอง 683ปีที่แล้ว
A discussion of Java parameter passing with demonmstrations of what java is really doing with objects: passing the reference by value.
Parameter Passing Introduction
มุมมอง 1.1Kปีที่แล้ว
The beginning of a short subseries on parameter passing in my concepts of programming languages content. Intended for experienced programmers wanting to learn more about parameter passing options across various programming languages.
Creating Random Mazes Using Disjoint Sets
มุมมอง 1.5Kปีที่แล้ว
An explanation of how to use disjoint sets to create random mazes. Disjoint Set Introduction: th-cam.com/video/rO6gPEmhGRQ/w-d-xo.html Path Compression in Disjoint Sets: th-cam.com/video/iR2cf3aPVZU/w-d-xo.html
endl vs '\\n'
มุมมอง 2.3Kปีที่แล้ว
An explanation of the difference between endl and ' ' in C along with discussion of when to use each.
Representing Graphs in the Computer
มุมมอง 714ปีที่แล้ว
Introductory video on representating graphs in the computer including a bit of information on what graphs are and an introduction to both adjacency matrix and adjacency list representation.
File Reading in C++
มุมมอง 982ปีที่แล้ว
How to read files in C with a little information about general file processing in C . Corrected from previous video on this topic in the playlist.
Path Compression in Disjoint Sets
มุมมอง 2.4K2 ปีที่แล้ว
How path compression works in the disjoint set data structure
Disjoint Sets
มุมมอง 2.8K2 ปีที่แล้ว
An introduction to the disjoint set data structure, including arbitrary unions, union by size, and union by height. Generating Random Mazes - th-cam.com/video/xw4KcGsSx44/w-d-xo.html Kruskal's Algorithm for Finding Minimum Spanning Trees - th-cam.com/video/5iBeLKst5bo/w-d-xo.html Timestamps 0:00 - What we use Disjoint Sets for 0:38 - Important Assumptions 1:01 - Basic Idea to Implement a Disj...
Function Activation Records
มุมมอง 5K2 ปีที่แล้ว
An introduction to Function Activation Records, both static and dynamic. Correction: in 6:54-9:40, the value in the top activation record (value in main) should be 7, not 2, as it is both before and after that segment. Timestamps 0:00 - What is an Activation Record? 0:28 - Data We Need in a Function Activation Record 1:21 - Static Approach 2:06 - Advantages to the Static Approach 2:41 - Dra...
Collision Handling in Hash Tables
มุมมอง 8K2 ปีที่แล้ว
An introduction to basic collision handling techniques for hashing.
Hash Table Basics
มุมมอง 1.5K2 ปีที่แล้ว
An introduction to the basic concept of hashing. Timestamps 0:00 - Cost of Searching Data 0:56 - How to Obtain Constant Time Searches 1:27 - Perfect Hashing 3:02 - Space Concerns with Hash Tables 3:55 - Using Hash Functions to manage Large Key Ranges 6:42 - Handling Collisions (Some of the ways)
For Loops, Functions, and Arrays in Java
มุมมอง 5373 ปีที่แล้ว
For Loops, Functions, and Arrays in Java
Variable Declaration and Assignment in Java
มุมมอง 1.6K3 ปีที่แล้ว
Variable Declaration and Assignment in Java
Thank you so much professor Califf
You are very welcome. Glad you found it helpful.
thank you so much for this playlist
I'm glad you found the videos helpful
i am very thankful for you , i was losing my mind! until i watched your video❤
I'm happy you found it useful!
Thanks so much for a video. Clear explanation. Love it
I'm glad you found it helpful!
thanks professor my professor was lowk trolling with this one!
This helped me so much, you explained it really well. Thank you
Glad it helped!
thank you so much for this video
I'm glad you found it helpful
Very clear! I love the way you explain it.
Glad it was helpful!
ABSOUELTLY THANK YOU
Glad you found it helpful.
I need to know when do we include "term" and "factor" in the parse tree and how are they used.
That is purely a matter of looking at the grammar. Each parent and its children must match one of the rules for that nonterminal. And reading across the leaves of the tree from left to right, you must have the "sentence" that you're trying to parse. If both of those things are true, you have a correct parse tree.
Thanks for the video i love this
Thank you
This was great explanation. Thanks for the video. Subscribed right after!
I'm glad you found it helpful, and hope some of the other videos are as well. I also hope to give you some new content eventually.
very smooth explanation. thanks, Dr.
Glad it was helpful!
You just turned my prof's entire two hour lecture into a fifteen minute video. Thank you so much
I'm glad you found it helpful.
I hate BNF.
I'm sorry to hear that. It's a useful formalism.
At 18:25 we expected the difference between memory addresses in neighboring indexes to be 8 bytes, but looks like the difference between index 1 and 2 is only 2 bytes?
This is a hexadecimal number (base 16), not a decimal number, so the difference is, in fact, 8 bytes.
i have my oops exam tmrw, thankyu for this
Glad you found it helpful.
I found this video not knowing anything about parse three and guezz what im thrilled getting 2 examples done
Glad it was helpful.
This was a great class to refresh my c++ knowledge for my new job. Straight to the point. The timestamps were very helpful to focus on the things I forgot. Thanks a lot!
I'm glad you found it helpful, and I have to credit one of my former students for adding the timestamps, which I agree are very useful.
It is very similar to Context-Free Grammar!
BNF grammars can represent regular, context free, or context sensitive grammars. It's just a different syntax for the grammar that we typically use in theory contexts.
Thanks. The only video that actually made sense after 12 hours of studying gibberish
I'm glad you found it helpful.
thank you
ahhhh feels like university again
Definitely who it was created for. ;-)
still uncreal why this algorithm is O(N). We have O(N) non-leafs to visit, and each may have to go all the way down to the leaf, which means each may need O(logN) swaps. What's stopping ths from being O(N*logN)?
The basic idea here is that we know that most of our operations are not operating on the whole tree. We have at most N/2 percolate down operations to do. But half of those are constant time operations, guaranteed to require just one comparison, because they are performed on a node whose children are leaves. And half of the remaining are no more than 2 and so on. We can take advantage of that knowledge to work out the math and see that the number of comparisons for the whole process is actually O(n).
@@maryelainecaliff so, N/2 total nodes, comprised of: N/4*1 + N/8*2 + N/16*4.. So all parts of the N/2 set may require up to N/4 operations each. Doesn't look like O(N)
@@AlexN2022 I recommend 2 things. For intuitive understanding, see what happens with worst case situations (form a max heap from an array sorted in a ascending of moderate size and count). For the math, dig up one of the actual formal proofs from a textbook or website. I am not going to repeat that work here.
Underrated series
Thank you.
Really Well Explained!
Glad it was helpful!
Very clear. Thanks!
Glad it was helpful!
thank you!!
You're welcome!
this is so helpful thank you! finally understand what flushing the buffer actually means
I'm glad it helped.
Excellent video/tutorial! Thanks a lot Dr Califf
Glad you found it helpful.
słabe niestety eh duzo szczekania malo robienia
hello dear ms mary can i contact you privately - iam a begginner want to find ahelp to be a professional progamer and need a hand of help from you if you dont mind. thanks in advance
Finally someone who doesn't simply say that std::endl flushes the buffer, but explains it in more detail! Thank you very much.
Glad it was helpful!
thanks a lot! the applications section is very useful!
I'm glad you found it helpful.
This is great explanation! Thank you very much! 🙏
I'm glad you found it helpful.
You are an amazing teacher, thank you for this
I'm glad you found it helpful.
very helpful. thank you
I've coded in C++ but it was ages ago and I've been coding in Java and C# for the last 25 and 15 years respectively. I love this series for all the same reasons as everyone else has said, definitely don't need beginner stuff, just need to understand better how to mentally translate to C++ and to understand the differences. This video says that dynamically allocated arrays are initialized and I'm not sure if it's just different now because of C++20 or something I did wrong, but it doesn't appear to be the case for me. I get some garbage numbers at the beginning of the dynamic and then a pile of zeros instead of it being all zeros like when you showed it. I realize I'm late to this party since all these videos were from a few years ago, but if you are looking for ideas on how to extend this series (or perhaps make a separate series?) I would be very excited to see a series of videos with topics that fit the category of "these are java.util things, and this is how you use C++ STL things that are similar."
Dynamic arrays are not generally initialized by default, but they can be initialized with syntax like this: int * myDynIntArray = new int[20]{0}; If I said they were, that was definitely mis-speaking. I'm glad you have found the series useful.
Thank you for the video, really appreciate it.
Glad it was helpful!
This is it. If you don't understand dijkstra's with heaps, this demystifies it. I just looked at the code implementation and couldn't comprehend it, but this decomposition helped tremendously. The key takeaway is how the priority queue pushes down costly jumps to a node X, so when we get to that item in the queue, that node X will already be "marked" by a shorter path, meaning we can discard that item from the queue, essentially skipping steps. Moreover, since we push "up" the uncostly jumps, our "marks" essentially give us the shortest path to each node, meaning we can stop the algorithm as soon as we have marks equal to the number of nodes. If you imagine a big graph, you're going to "push down" into the queue a bunch of costly items, you're going to "mark" the nodes rather quickly, finding the shortest path as soon as you mark them all, and discarding a considerable amount of items in the process. Notice too, that if you have a huge number of edges, compared to vertices, you're doing a lot of work sorting edges in the queue, that you could spend doing lookups, so intuitively you can start being suspicious that this solution might be equal or worse than the naive approach. I am really pleased with what i unlocked watching this video, thank you Mary. You've also shown me i should, ideally, grab a pen and paper and just go through problems to understand them.
I'm glad you found the video helpful. I think you're right that the key to understanding is with the ideas and diagrams, because we don't get bogged down in the specifics of code. Then once we really understand what's going on, it becomes much easier to translate into code (in any language).
@@maryelainecaliff the code is just that, code for a set of ideas. and some key ideas, especially for these fundamental algorithms' optimized implementations, are very obfuscated within the code. From the array implementation to the priority queue one, the key takeaway is that sorting the queue by edge weight gives us the optimal edge as the first edge we process between those nodes (if one edge is always smaller than two, aka no negative weights), which is almost impossible to decipher this without brute forcing examples in your head/paper or having someone explain it to you, but it's really beautiful once you actually grasp the intention.
Only thing I would recommend is looking at cmake instead of make files. They are closer to the maven/gradle workflows, java/spring developers are use to.
Dr, why you stopped 😢
I've been very busy. I'm hoping to get a few new videos out this summer.
live roger reaction
Explained in a way that's very easy to understand and thanks for not giving the code. Now I can try it on my own and test my understanding
That's my goal. I'm glad you found it helpful.
I wish I found you 10 years ago
Looking for this playlist. Finally found..
I hope you find it helpful
take love from Bangladesh
v.nice you earned a subscriber, your video content is incredible, but I was searching for "attribute grammar" in the context of theory of programming language but I did not find
I'm glad you like the content, but attribute grammars are beyond the scope of the classes I currently teach, and I'm still primarily focused on making videos for my current students, though I'm delighted that others find them helpful.
By seeing the example of the <if-statement>, I just remembered I've already seen the problem of that way of doing it, that tuns ambiguous using the parse trees, but how we do an unambiguous BNF of <if-statement>? I've already seen the explanation of this problem, using the concepts of matched and unmatched sentences, but I did not understand it very well.
Have you checked out my video on ambiguous grammars?
@@maryelainecaliff Not yet, I'll check it.